CMake是什么
CMake是一個opensource的軟件項目構(gòu)建管理工具饥伊;它允許開發(fā)者用一種簡單的文本格式進行構(gòu)建參數(shù)的指定肴盏。
為什么使用CMake
如果你之前有過維護軟件包的構(gòu)建和安裝的經(jīng)驗尺借,你就會對CMake有興趣除嘹。
當前很多項目都可以在Linux下用Makefile和在Windows下用Visual Studio進行編譯;這要求開發(fā)者在對應的系統(tǒng)下保持構(gòu)建工具的更新,并且不同系統(tǒng)的構(gòu)建行為保持一致迹卢;如果再引入XCode,這需要更多的構(gòu)建工具徒仓,這樣會是一個問題腐碱。
如果在此基礎上引入可選組件,比如如果系統(tǒng)上有l(wèi)ibjpeg掉弛,項目就支援JPEG症见,這會造成更大的麻煩。
CMake提供了一個簡單的殃饿,易于理解的文件格式來解決上述問題谋作。
如果一個項目有多個開發(fā)者參與,或者這個項目有多個目標平臺乎芳;那么不可避免的需要在多臺PC上進行構(gòu)建遵蚜,不同的PC在開發(fā)環(huán)境上會有差異。
- 自動進行項目構(gòu)建所需的program奈惑、library吭净、header file的查找能力;
- 在source tree以外進行構(gòu)建的能力肴甸;
- 為Qt moc攒钳,SWIG等自動產(chǎn)生復雜的自定義命令的能力;
- 在configuration階段進行可選組件定制的能力雷滋;
- 自動從簡單文件文件產(chǎn)生workspace和project的能力不撑;
- 配置生成靜態(tài)庫/動態(tài)庫的能力;
- 自動產(chǎn)生文件依賴晤斩,支持并行編譯焕檬;
CMake的基本語法
build的過程由每個目錄下的名為CMakeFileLists.txt
的文件組成的一系列文件列表所控制;
CMakeFileLists.txt
文件由CMake語句進行項目描述澳泵,CMake語句的語法為:
command( args... )
- command是命令的名字实愚,CMake是不區(qū)分大小寫的;
- args是一系列由空格分隔的參數(shù)兔辅,如果參數(shù)中有空格腊敲,參數(shù)需要用雙引號引起來;
變量被引用的格式是${VAR}
;
多個參數(shù)可以使用set
來使之構(gòu)成一個list
set( Foo a b c )
這樣設置的結(jié)果是Foo
的值是 a b c
;
CMake可以直接訪問系統(tǒng)環(huán)境變量和Windows注冊表维苔;
訪問系統(tǒng)環(huán)境變量的語法:
$Env{ARG}
訪問Windows注冊表:
[HKEY_CURRENT_USER\\Software\\path1\\path2;key]
Hello World
一個簡單的CMakeFileLists.txt
的例子
project( Hello )
add_executalbe( Hello Hello.c )
一個稍微復雜的例子
cmake_minimum_required( 2.6 )
project( HELLO )
set( HELLO_SRCS Hello.c File2.c File3.c )
if( WIN32 )
set( HELLO_SRCS ${HELLO_SRCS} WinSupport.c )
esle()
set( HELLO_SRCS ${HELLO_SRCS} LinuxSupport.c )
endif()
add_executable( HELLO ${HELLO_SRCS} )
# look for the Tcl library
find_library( TCL_LIBRARY
NAMES tcl tcl84 tcl83 tcl82 tcl80
PATHS /usr/lib /usr/local/lib
)
if( TCL_LIBRARY )
target_link_library( Hello ${TCL_LIBRARY} )
endif()
如何運行CMake
通常使用兩種方式運行CMake
cmake-gui
通過桌面或者命令行運行cmake-gui
碰辅,打開后UI如下:
[外鏈圖片轉(zhuǎn)存失敗(img-ZwXwlARt-1564383408597)(http://7xqdd5.com1.z0.glb.clouddn.com/cmake-gui.png)]
按照如下步驟進行設置:
- 圖示1, 選擇source code所在位置(如果通過
cmake-gui path_to_src
的方式介时,source code位置已經(jīng)設定好); - 圖示2没宾, 選擇build要產(chǎn)生文件的存放位置凌彬;
- 圖示3,configure循衰;如果是第一次執(zhí)行configure铲敛,會彈出對話框讓進行compiler的選擇,指定toolchain file会钝;這樣設置以后伐蒋,configure過程會進行,在圖示4的區(qū)域顯示相關(guān)option迁酸;
- 圖示4先鱼,進行相關(guān)參數(shù)或者option的設置;
- 圖示5胁出,generate型型,產(chǎn)生指定平臺的build file(Linux的Makefile或者Visual Studio的sln file);
命令行使用cmake
- 切換到準備放置binary file的目錄
- cmake path_to_src -Doption
- make
- make install