一蓖乘、什么是cmake
CMake 是一個(gè)跨平臺(tái)的啼染,開源的構(gòu)建系統(tǒng)(BuildSystem)叔壤。CMake 可以通過 CMakeLists.txt 文件來產(chǎn)生特定平臺(tái)的標(biāo)準(zhǔn)的構(gòu)建文件区端,例如:為 Unix 平臺(tái)生成makefiles文件(使用GCC編譯),為 Windows MSVC 生成 projects/workspaces(使用VS IDE編譯)或Makefile文件(使用nmake編譯)伯诬。
關(guān)鍵一點(diǎn)是跨平臺(tái)晚唇,并且在Linux平臺(tái)最終生成makefile來進(jìn)行編譯。
二盗似、常用知識(shí)點(diǎn)
1哩陕、靜態(tài)庫鏈接
target_link_libraries(dlib_demo libdlib.a)
2、動(dòng)態(tài)庫鏈接
target_link_libraries(dlib_demo dlib)
3赫舒、開啟動(dòng)態(tài)庫編譯
cmake .. -DBUILD_SHARED_LIBS=ON
cmake .. :注意命令后面的點(diǎn)號(hào),代表本目錄的上一級(jí)目錄悍及。
執(zhí)行【cmake ..】之后,系統(tǒng)自動(dòng)生成了:CMakeFiles, CMakeCache.txt, cmake_install.cmake 等文件,并且生成了Makefile号阿。不用太關(guān)注這些文件的意義并鸵,重點(diǎn)是它自動(dòng)生成了Makefile。
4扔涧、cmake設(shè)置變量
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}")
三届谈、實(shí)現(xiàn)cmake選擇編譯
執(zhí)行命令cmake .. -DHISI=1或者-DHISI=ON進(jìn)行海思編譯器編譯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---基礎(chǔ)練習(xí)1 - WP的爛筆頭 - 博客園 https://www.cnblogs.com/carle-09/p/11684575.html
Cmake鏈接靜態(tài)庫(一) - ox0080的博客 https://blog.csdn.net/ox0080/article/details/96453985
Cmake 設(shè)置交叉編譯環(huán)境_Linux編程_Linux公社-Linux系統(tǒng)門戶網(wǎng)站 https://www.linuxidc.com/Linux/2014-03/98622.htm