cmake自动选择编译器脚本

一、什么是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}")


image

三、实现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()
image

参考资料:

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

你可能感兴趣的:(cmake自动选择编译器脚本)