CMake學習筆記(1)——用CMake編譯一個hello world程式
阿新 • • 發佈:2019-02-06
CMake是一個比make更高階的編譯配置工具,它可以根據不同平臺、不同的編譯器,生成相應的Makefile或者vcproj專案。
通過編寫CMakeLists.txt,可以控制生成的Makefile,從而控制編譯過程。CMake自動生成的Makefile不僅可以通過make命令構建專案生成目標檔案,還支援安裝(make install)、測試安裝的程式是否能正確執行(make test,或者ctest)、生成當前平臺的安裝包(make package)、生成原始碼包(make package_source)、產生Dashboard顯示資料並上傳等高階功能,只要在CMakeLists.txt中簡單配置,就可以完成很多複雜的功能,包括寫測試用例。
如果有巢狀目錄,子目錄下可以有自己的CMakeLists.txt。
總之,CMake是一個非常強大的編譯自動配置工具,支援各種平臺,KDE也是用它編譯的,感興趣的可以試用一下。
解釋:
生成名為hello的可執行檔案,執行:
通過編寫CMakeLists.txt,可以控制生成的Makefile,從而控制編譯過程。CMake自動生成的Makefile不僅可以通過make命令構建專案生成目標檔案,還支援安裝(make install)、測試安裝的程式是否能正確執行(make test,或者ctest)、生成當前平臺的安裝包(make package)、生成原始碼包(make package_source)、產生Dashboard顯示資料並上傳等高階功能,只要在CMakeLists.txt中簡單配置,就可以完成很多複雜的功能,包括寫測試用例。
建立一個名為t1的工程:
編寫main.c檔案
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
編寫一個CMakeLists.txt檔案:
PROJECT(HELLO) SET(SRC_LIST main.c) MESSAGE(STATUS "THIS IS BINARY DIR " ${HELLO_BINARY_DIR}) MESSAGE(STATUS "THIS IS SOURCE DIR " ${HELLO_SOURCE_DIR}) ADD_EXECUTABLE(hello ${SRC_LIST})
解釋:
PROJECT:用於定義工程名字。這個指令隱式的定義了兩個cmake變數:<projectname>_BINARY_DIR 以及<projectname>_SOURCE_DIR,這兩個變數分別指定了編譯後二進位制檔案的路徑和工程原始檔的路徑。在這裡時HELLO_BINARY_DIR和HELLO_SOURCE_DIR ,可以直接使用PROJECT_BINARY_DIR,PROJECT_SOURCE_DIR,這樣改變工程檔名不需要修改這些變數;
SET:用於定義變數,這裡是將SRC_LIST;
MESSAGE:用於在終端列印給使用者資訊;
ADD_EXECUTABLE:生成可執行檔案,${}用來引用變數。
然後開始構建:
cmake .
make
生成名為hello的可執行檔案,執行:
./hello
得到輸出:
hello world
前面的是內部編譯,即直接在工程目錄下進行構建,生成的中間檔案也在工程目錄下,這樣顯得很亂,下面介紹外部編譯:
建立一個名為build的目錄:
整個工程的目錄結構如下:
t1
├── build
├── CMakeLists.txt
└── main.c
進如build目錄,進行構建:
cmake ..
make
..代表當前目錄的父目錄。
這樣構建後生成的所有檔案都會在build目錄中。