CMake簡(jiǎn)介
CMake是個(gè)一個(gè)開(kāi)源的跨平臺(tái)自動(dòng)化建構(gòu)系統(tǒng)姓言,用來(lái)管理軟件建置的程序蔗蹋,并不依賴(lài)于某特定編譯器何荚,并可支持多層目錄、多個(gè)應(yīng)用程序與多個(gè)庫(kù)猪杭。 它用配置文件控制建構(gòu)過(guò)程(build process)的方式和Unix的make相似餐塘,只是CMake的配置文件取名為CMakeLists.txt。CMake并不直接建構(gòu)出最終的軟件皂吮,而是產(chǎn)生標(biāo)準(zhǔn)的建構(gòu)檔(如Unix的Makefile或Windows Visual C++的projects/workspaces)戒傻,然后再依一般的建構(gòu)方式使用税手。
在 linux 平臺(tái)下使用 CMake 生成 Makefile 并編譯的流程如下:
- 編寫(xiě) CMake 配置文件 CMakeLists.txt
- 執(zhí)行命令 cmake PATH 或者 ccmake PATH 生成 Makefile(ccmake 和 cmake 的區(qū)別在于前者提供了一個(gè)交互式的界面)。其中需纳, PATH 是 CMakeLists.txt 所在的目錄
- 使用 make 命令進(jìn)行編譯
使用舉例
目錄結(jié)構(gòu):
./Demo
|
+--- main.cc
|
+--- sub/
|
+--- SubFunctions.cc
|
+--- SubFunctions.h
根目錄中的 CMakeLists.txt :
# CMake 最低版本號(hào)要求
cmake_minimum_required (VERSION 2.8)
# 項(xiàng)目信息
project (Demo)
# 查找當(dāng)前目錄下的所有源文件
# 并將名稱(chēng)保存到 DIR_SRCS 變量
aux_source_directory(. DIR_SRCS)
# 添加 sub 子目錄
add_subdirectory(sub)
# 指定生成目標(biāo)
add_executable(Demo main.cc)
# 添加鏈接庫(kù)
target_link_libraries(Demo SubFunctions)
子目錄中的 CMakeLists.txt:
# 查找當(dāng)前目錄下的所有源文件
# 并將名稱(chēng)保存到 DIR_LIB_SRCS 變量
aux_source_directory(. DIR_LIB_SRCS)
# 生成鏈接庫(kù)
add_library (SubFunctions ${DIR_LIB_SRCS})
編譯項(xiàng)目
在當(dāng)前目錄執(zhí)行 cmake . 芦倒,得到 Makefile 后再使用 make 命令編譯得到 Demo可執(zhí)行文件
自定義編譯選項(xiàng)
CMake 允許為項(xiàng)目增加編譯選項(xiàng),從而可以根據(jù)用戶(hù)的環(huán)境和需求選擇最合適的編譯方案
# CMake 最低版本號(hào)要求
cmake_minimum_required (VERSION 2.8)
# 項(xiàng)目信息
project (Demo4)
# 加入一個(gè)配置頭文件不翩,用于處理 CMake 對(duì)源碼的設(shè)置
configure_file (
"${PROJECT_SOURCE_DIR}/config.h.in"
"${PROJECT_BINARY_DIR}/config.h"
)
# 是否使用自己的 DefineFunctions 庫(kù)
option (USE_MYDEFINE
"Use provided implementation" ON)
# 是否加入 DefineFunctions 庫(kù)
if (USE_MYDEFINE)
include_directories ("${PROJECT_SOURCE_DIR}/sub")
add_subdirectory (sub)
set (EXTRA_LIBS ${EXTRA_LIBS} SubFunctions)
endif (USE_MYDEFINE)
# 查找當(dāng)前目錄下的所有源文件
# 并將名稱(chēng)保存到 DIR_SRCS 變量
aux_source_directory(. DIR_SRCS)
# 指定生成目標(biāo)
add_executable(Demo ${DIR_SRCS})
target_link_libraries (Demo ${EXTRA_LIBS})
- configure_file 命令用于加入一個(gè)配置頭文件 config.h 兵扬,這個(gè)文件由 CMake 從 config.h.in 生成,通過(guò)這樣的機(jī)制口蝠,將可以通過(guò)預(yù)定義一些參數(shù)和變量來(lái)控制代碼的生成
- option 命令添加了一個(gè) USE_MYMATH 選項(xiàng)器钟,并且默認(rèn)值為 ON
- USE_MYMATH 變量的值來(lái)決定是否使用我們自己編寫(xiě)的 MathFunctions 庫(kù)
安裝和測(cè)試
CMake 也可以指定安裝規(guī)則,以及添加測(cè)試妙蔗。這兩個(gè)功能分別可以通過(guò)在產(chǎn)生 Makefile 后使用 make install 和 make test 來(lái)執(zhí)行