cmake基礎筆記
阿新 • • 發佈:2018-12-08
CMakeLists.txt編寫及常用命令
C/C++專案跨平臺編譯時,CMake經常用到,在windows的vs中配置工程則直接在屬性中配置相應的三方標頭檔案及庫很方便,通過編寫CMakeLists.txt同樣可以實現這種工程依賴的配置。
一、常用命令
1)指定cmake最低版本:
cmake_minimum_required(VERSION 2.8)
2)指定專案名稱:
project(cmakefirst C CXX)
3)設定C/C++編譯選項
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS" }
4)附加包含目錄(第三方依賴標頭檔案目錄)
include_directories(usr/local/cuda/include)
5) 附加庫目錄(第三庫目錄)
link_directories(usr/local/lib)
6) 新增三方依賴(opencv、cuda之類的)
find_package( OpenCV REQUIRED ) include_directories(${OpenCV_INCLUDE_DIRS}) target_link_libraries(opencv_Test ${OpenCV_LIBS})
7) 指定需要編譯的程式碼
(1)第一種方式
aux_source_directory("./src" src) #所有原始檔(src目錄下)賦值給變數src
(2)第二種方式
file(GLOBTEST_SRC ${CMAKE_CURRENT_LIST_DIR}/src/*.h
${CMAKE_CURRENT_LIST_DIR}/src/*.cpp)
set(TEST_COMPILE_CODE ${TEST_SRC})
8)編譯為動態庫
add_library(opencv_Test SHARED ${TEST_COMPILE_CODE})
9)編譯為靜態庫
add_library(opencv_Test STATIC ${TEST_COMPILE_CODE})
10)編譯為可執行檔案
add_executable(opencv_Test ${TEST_COMPILE_CODE})
11)連結第三方庫
target_link_libraries(opencv_Test ${TEST_LINKER_LIBS})
#空格並新增相應的庫(windows下為庫的名稱
#opencv_world310,ubuntu下為庫的名稱及其後綴,如#libcaffe.so)
#如果沒有新增庫目錄則直接帶上庫的路徑及庫名稱
12)設定輸出目錄(根據需要選則使用)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY your path)
2、一個demo
#第一CMake方式的學習案例:僅僅是依賴OPENCV的三方庫
#功能:讀取並顯示圖片
#作者:Sygoing
#日期:2018.11.29
#1.cmake verson,指定cmake的最小版本號
cmake_minimum_required(VERSION 2.8)
#2.project name,指定專案的名稱,一般和專案的資料夾名稱對應
project(cmakefirst C CXX)
#3.set environment variable,設定環境變數
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
#-------此處為三方依賴的標頭檔案 對應VS屬性的常規包含目錄---------
#4.include標頭檔案目錄
include_directories(${CMAKE_CURRENT_LIST_DIR}/3rdparty/include/Opencv
${CMAKE_CURRENT_LIST_DIR}/3rdparty/include/Opencv/opencv
${CMAKE_CURRENT_LIST_DIR}/3rdparty/include/Opencv/opencv2
)
#-------此處為三方依賴的Lib檔案所在目錄以及具體依賴的Lib檔名列表---------
#5.library目錄及name名稱
link_directories(${CMAKE_CURRENT_LIST_DIR}/3rdparty/lib)
list(APPEND TEST_LINKER_LIBS opencv_world320)
#-------此處為本專案需要編譯的標頭檔案和原始檔---------
#6.source directory原始檔目錄
file(GLOB TEST_SRC ${CMAKE_CURRENT_LIST_DIR}/src/*.h
${CMAKE_CURRENT_LIST_DIR}/src/*.cpp)
set(TEST_COMPILE_CODE ${TEST_SRC})
#-------設定編譯模式:可執行檔案、動態庫、靜態庫---------
#7.1.add executable file,編譯為可執行檔案
add_executable(cmakefirst ${TEST_COMPILE_CODE})
#7.2.add library file,編譯為動態庫
# add_library(opencv_Test SHARED ${TEST_COMPILE_CODE})
#8.add link library,新增工程所依賴的庫
target_link_libraries(cmakefirst ${TEST_LINKER_LIBS})