CMake學習筆記(1)——用CMake編譯一個hello world程序
注意:
CMakeLists.txt中message 輸出的消息是在執行cmake的時候輸出到終端的。
eg:
執行cmake .
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也是用它編譯的,感興趣的可以試用一下。
建立一個名爲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目錄中。