cmake小結:
- CMakeLists.txt 檔案中不區分大小寫
-
PROJECT(project_name) 定義工程名稱
文法:project(projectname [cxx] [c] [java])
可以指定工程采用的語言,選項分别表示:C++, C, java, 如不指定預設支援所有語言
- MESSAGE(STATUS, “Content”) 列印相關消息輸出消息,供調試CMakeLists.txt 檔案使用。
- SET(CMAKE_BUILE_TYPE DEBUG) 設定編譯類型debug 或者release。 debug 版會生成相關調試資訊,可以使用GDB 進行 調試;release不會生成調試資訊。當無法進行調試時檢視此處是否設定為debug.
- SET(CMAKE_C_FLAGS_DEBUG “-g -Wall”) 設定編譯器的類型
CMAKE_C_FLAGS_DEBUG ---- C 編譯器 CMAKE_CXX_FLAGS_DEBUG ---- C++ 編譯器
- ADD_SUBDIRECTORY(utility) 添加要編譯的子目錄為工程主目錄下的存放源代碼的子目錄使用該指令,各子目錄出現的順序随意。
-
SET(SOURCE_FILES …..)
表示要編譯的源檔案,所有的源檔案都要羅列到此處。set 設定變量,變量名SOURCE_FILES自定義。
-
INCLUDE_DIRECTORY(…)
include頭檔案時搜尋的所有目錄
變量PROJECT_SOURCE_DIR 表示工程所在的路徑,系統預設的變量
-
LINK_DIRECTORIES(…)
庫檔案存放的目錄,在程式連接配接庫檔案的時候要再這些目錄下尋找對應的庫檔案
-
ADD_LIBRARY(…)
表示生成靜态連結庫libassociaiton.a,由${PROJECT_SOURCE_DIR}代表的檔案生成。
文法:ADD_LIBRARY(libname [SHARED|STATIC]
SHARED 表示生成動态庫, STATIC表示生成靜态庫。
-
TARGET_LINK_LIBRARY(association core)
表示庫association 依賴core庫檔案
-
SET_TARGET_PROPERTIES
設定編譯的庫檔案存放的目錄,還可用于其他屬性的設定。如不指定,
生成的執行檔案在目前編譯目錄下的各子目錄下的build目錄下,好拗口!簡單一點:
如指定在: ./src/lib 下
不指定在: ./src/build/utility/build 目錄下
生成的中間檔案在./src/build/utilty/build 目錄下,不受該指令額影響
-
ADD_EXECUTABLE() #指定要生成的執行檔案的名稱server
其他用法同utilty/CMakeLists.txt
-
SET_TARGET_PROPERTIES
設定生成的執行檔案存放的路徑,
注意:
執行檔案server 依賴的子目錄utility 子目錄生成的靜态庫libutility.a,在指定的時候要寫成:
TARGET_LINK_LIBRARIES(server utility)
而不能寫成:
TARGET_LINK_LIBRARIES(server libutility.a)
否則編譯總會提示找不到libutility庫檔案。
但使用第三方的庫卻要指定成具體的庫名,如:libACE-6.0.0.so
這一點很詭異,暫時還沒找到原因。
CMake更多詳細用法可參考 《cmake實踐》