cmake自动选择编译器脚本
一、什么是cmakeCMake 是一个跨平台的,开源的构建系统(BuildSystem)。CMake 可以通过 CMakeLists.txt 文件来产生特定平台的标准的构建文件,例如:为 Unix 平台生成makefiles文件(使用GCC编译),为 Windows MSVC 生成 projects/workspaces(使用VS IDE编译)或Makefile文件(使用nmake编译)。关键..
一、什么是cmake
CMake 是一个跨平台的,开源的构建系统(BuildSystem)。CMake 可以通过 CMakeLists.txt 文件来产生特定平台的标准的构建文件,例如:为 Unix 平台生成makefiles文件(使用GCC编译),为 Windows MSVC 生成 projects/workspaces(使用VS IDE编译)或Makefile文件(使用nmake编译)。
关键一点是跨平台,并且在Linux平台最终生成makefile来进行编译。
二、常用知识点
1、静态库链接
target_link_libraries(dlib_demo libdlib.a)
2、动态库链接
target_link_libraries(dlib_demo dlib)
3、开启动态库编译
cmake … -DBUILD_SHARED_LIBS=ON
cmake … :注意命令后面的点号,代表本目录的上一级目录。
执行【cmake …】之后,系统自动生成了:CMakeFiles, CMakeCache.txt, cmake_install.cmake 等文件,并且生成了Makefile。不用太关注这些文件的意义,重点是它自动生成了Makefile。
4、cmake设置变量
set(SRC_CPP dlib_face_recognition.cpp)
追加变量值
set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -g -std=c++11 -W”)
5、cmake打印变量值
message(“src cpp = ${SRC_CPP}”)
三、实现cmake选择编译
执行命令cmake … -DHISI=1或者-DHISI=ON进行海思编译器编译demo。
demo如下:
cmake_minimum_required(VERSION 2.8.12)
project(eignface_demo)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lstdc++ -lm")
set(OPENCV_LIB opencv_highgui opencv_objdetect opencv_core opencv_imgproc opencv_contrib)
set(SRC_CPP EigenFace.cpp)
if (HISI)
set(TOOLCHAIN_DIR "/opt/hisi-linux-nptl/arm-hisiv100-linux/target")
set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_DIR})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/arm-hisiv100nptl-linux-g++)
set(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/arm-hisiv100nptl-linux-gcc)
include_directories(./hisi_opencv/include/)
link_directories(./hisi_opencv/lib/)
message("-- Use hisi compile demo")
add_executable(eignface_hisi ${SRC_CPP})
target_link_libraries(eignface_hisi ${OPENCV_LIB})
else()
set(CMAKE_C_COMPILER "/usr/bin/gcc")
include_directories(./gcc_opencv/include/)
link_directories(./gcc_opencv/lib/)
message("-- Use gcc compile demo")
add_executable(eignface_gcc ${SRC_CPP})
target_link_libraries(eignface_gcc ${OPENCV_LIB})
endif()
参考资料:
CMake—基础练习1 - WP的烂笔头 - 博客园 https://www.cnblogs.com/carle-09/p/11684575.html
Cmake链接静态库(一) - ox0080的博客 https://blog.csdn.net/ox0080/article/details/96453985
Cmake 设置交叉编译环境_Linux编程_Linux公社-Linux系统门户网站 https://www.linuxidc.com/Linux/2014-03/98622.htm
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)