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}”)

三、實現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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章