CMake官方版是一款構(gòu)建、測(cè)試和打包軟件的跨平臺(tái)編程工具。CMake官方版是用于控制軟件使用簡(jiǎn)單的平臺(tái)和編譯器編譯過(guò)程獨(dú)立配置文件。CMake生成本機(jī)makefile和工作區(qū),可以使用用戶(hù)所選擇的編譯器環(huán)境。
1、CMake可以編譯源代碼、制作程序庫(kù)、產(chǎn)生適配器(wrapper)、還可以用任意的順序建構(gòu)執(zhí)行檔。
2、支持in-place建構(gòu)(二進(jìn)檔和源代碼在同一個(gè)目錄樹(shù)中)和out-of-place建構(gòu)(二進(jìn)檔在別的目錄里),因此可以很容易從同一個(gè)源代碼目錄樹(shù)中建構(gòu)出多個(gè)二進(jìn)檔。
3、CMake 也支持靜態(tài)與動(dòng)態(tài)程式庫(kù)的建構(gòu)。“CMake”這個(gè)名字是“cross platform make”的縮寫(xiě)。雖然名字中含有“make”,但是CMake和Unix上常見(jiàn)的“make”系統(tǒng)是分開(kāi)的,而且更為高階。
下載cmake
Windows版本安裝直接運(yùn)行對(duì)應(yīng)系統(tǒng)的EXE
LINUX版本的安裝:
安裝cmakecmake-*.*.*tar.gz為下載下來(lái)的源碼包
tar xvf cmake-*.*.*.tar.gz
cd cmake-*.*.*.
/bootstrap
make
make install
如果已經(jīng)安裝了cmake,想要安裝新版本,則:
cd cmake-*.*.*
cmake .
makemake install
單個(gè)源文件工程
1、源文件編寫(xiě)
假設(shè)項(xiàng)目test中只有一個(gè)main.cpp源文件,程序用途是計(jì)算一個(gè)數(shù)的指數(shù)冪。
#include
#include
/**
* power - Calculate the power of number.
* @param base: Base value.
* @param exponent: Exponent value.
*
* @return base raised to the power exponent.
*/
double power(double base, int exponent)
{
int result = base;
int i;
if (exponent == 0)
{
return 1;
}
for(i = 1; i < exponent; ++i)
{
result = result * base;
}
return result;
}
int main(int argc, char *argv[])
{
if(argc < 3)
{
printf("Usage: %s base exponent \n", argv[0]);
return 1;
}
double base = atof(argv[1]);
int exponent = atoi(argv[2]);
double result = power(base, exponent);
printf("%g ^ %d is %g\n", base, exponent, result);
return 0;
}
2、編寫(xiě)CMakeLists.txt
在main.cpp源文件目錄test下編寫(xiě)CMakeLists.txt文件。
#CMake最低版本號(hào)要求
cmake_minimum_required (VERSION 2.8)
#項(xiàng)目信息
project (demo)
#指定生成目標(biāo)
add_executable(demomain.cpp)
CMakeLists.txt由命令、注釋和空格組成,其中命令是不區(qū)分大小寫(xiě)。符號(hào)#后的內(nèi)容被認(rèn)為是注釋。命令由命令名稱(chēng)、小括號(hào)和參數(shù)組成,參數(shù)之間使用空格進(jìn)行間隔。
本例中CMakeLists.txt文件的命令如下:
cmake_minimum_required:指定運(yùn)行本配置文件所需的CMake的最低版本;
project:參數(shù)值是demo,表示項(xiàng)目的名稱(chēng)是demo。
add_executable:將名為main.cpp的源文件編譯成一個(gè)名稱(chēng)為demo的可執(zhí)行文件。
3、編譯工程
在源碼根目錄下創(chuàng)建一個(gè)build目錄,進(jìn)入build目錄,執(zhí)行cmake ..,生成Makefile,再使用make命令編譯得到demo可執(zhí)行文件。
通常,建議在源碼根目錄下創(chuàng)建一個(gè)獨(dú)立的build構(gòu)建編譯目錄,將構(gòu)建過(guò)程產(chǎn)生的臨時(shí)文件等文件與源碼隔離,避免源碼被污染。
什么是組態(tài)檔?
組態(tài)檔是用一種建構(gòu)軟件專(zhuān)用的特殊編程語(yǔ)言寫(xiě)的CMake腳本。內(nèi)建C語(yǔ)言、C++、Fortran、Java的自動(dòng)相依性分析功能。經(jīng)由CMake腳本語(yǔ)言支持SWIG、Qt、FLTK。內(nèi)建對(duì)微軟Visual Studio .NET和過(guò)去的Visual Studio版本的支持,可以產(chǎn)生后綴為.dsp、.sln和.vcproj的文檔。用傳統(tǒng)的時(shí)間標(biāo)簽偵測(cè)檔案內(nèi)容的改變。支持平行建構(gòu)(在多臺(tái)電腦上同時(shí)建構(gòu))在許多操作系統(tǒng)上進(jìn)行跨平臺(tái)編譯,包括Linux、POSIX相容的系統(tǒng)(AIX、*BSD、HP-UX、IRIX、MinGW/MSYS、Solaris系統(tǒng))、Mac OS X和微軟Windows 95/98/NT/2000/XP等。產(chǎn)生可以給Graphviz用的全局相依圖。已經(jīng)和Dart、CTest和CPack等軟件測(cè)試和釋出的工具整合。
CMake是一個(gè)比Make工具更高級(jí)的編譯配置工具,是一個(gè)跨平臺(tái)的、開(kāi)源的構(gòu)建系統(tǒng)(BuildSystem)。CMake允許開(kāi)發(fā)者編寫(xiě)一種平臺(tái)無(wú)關(guān)的CMakeList.txt文件來(lái)定制整個(gè)編譯流程,然后再根據(jù)目標(biāo)用戶(hù)的平臺(tái)進(jìn)一步生成所需的本地化Makefile和工程文件,如:為Unix平臺(tái)生成Makefile文件(使用GCC編譯),為Windows MSVC生成projects/workspaces(使用VS IDE編譯)或Makefile文件(使用nmake編譯)。使用CMake作為項(xiàng)目架構(gòu)系統(tǒng)的知名開(kāi)源項(xiàng)目有VTK、ITK、KDE、OpenCV、OSG等。
網(wǎng)友評(píng)論