現在有好幾種 Make 工具,例如 GNU Make ,QT 的 qmake ,微軟的 MS nmake,等等。這些 Make 工具遵循着不同的規範和標準,所執行的 Makefile 格式也千差萬別。這樣就帶來了一個嚴峻的問題:如果軟件想跨平臺,必須要保證能夠在不同平臺編譯。而如果使用上面的 Make 工具,就得爲每一種標準寫一次 Makefile ,這將是一件讓人抓狂的工作。
CMake就是針對上面問題所設計的工具:它首先允許開發者編寫一種平臺無關的 CMakeList.txt 文件來定製整個編譯流程,然後再根據目標用戶的平臺進一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。從而做到“Write once, run everywhere”。顯然,CMake 是一個比上述幾種 make 更高級的編譯配置工具
安裝流程如下:
wget https://cmake.org/files/v3.11/cmake-3.11.0-rc4-Linux-x86_64.tar.gz
tar zxvf cmake-3.11.0-rc4-Linux-x86_64.tar.gz
sudo mv cmake-3.11.0-rc4-Linux-x86_64 /opt/cmake-3.11
sudo ln -sf /opt/cmake-3.11/bin/* /usr/bin/
驗證:
cmake --version
一個簡單的例子:
mkdir cmake_test && cd cmake_test
編寫一個簡單的CPP程序
vim hello.cpp
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
編寫CMakeLists.txt,與hello.cpp位於同一目錄
project(hello)
cmake_minimum_required(VERSION 3.11)
aux_source_directory(. DIR_SRCS)
add_executable(hello ${DIR_SRCS})
CMakeLists.txt 的語法比較簡單,由命令、註釋和空格組成,其中命令是不區分大小寫的。符號 #
後面的內容被認爲是註釋。命令由命令名稱、小括號和參數組成,參數之間使用空格進行間隔。
對於上面的 CMakeLists.txt 文件,依次出現了幾個命令:
project
:參數值是hello
,該命令表示項目的名稱是hello
。不是強制性的,但最好始終都加上。cmake_minimum_required
:指定運行此配置文件所需的 CMake 的最低版本;- aux_source_directory:CMake 會將當前目錄所有源文件的文件名賦值給變量
DIR_SRCS
, add_executable
: 指示變量DIR_SRCS
中的源文件需要編譯成一個名稱爲 hello 的可執行文件
在該目錄下輸入(最好是在創建一個build文件夾,進入該文件夾,然後cmake .. ):
cmake .
然後再輸入:
make
最後輸入:
./hello
就可得到最後結果: