1. 程式人生 > >cmake基礎筆記

cmake基礎筆記

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