一、cmake是什么?
CMake是一個(gè)開(kāi)源、跨平臺(tái)的工具系列,是用來(lái)構(gòu)建、測(cè)試和打包軟件。
CMake使用平臺(tái)無(wú)關(guān)的配置文件來(lái)控制軟件編譯過(guò)程,并生成可在您選擇的編譯器環(huán)境中使用項(xiàng)目文件,比如可以生成vs項(xiàng)目文件或者makefile。CMake工具套件由Kitware公司創(chuàng)建,以滿足ITK和VTK等開(kāi)源項(xiàng)目對(duì)跨平臺(tái)構(gòu)建環(huán)境的需求。Kitware是一家從事醫(yī)療計(jì)算,高性能的可視化和計(jì)算,數(shù)據(jù)和分析,計(jì)算機(jī)視覺(jué)的公司。該公司成立于1998年。
二、為什么現(xiàn)在都在用cmake?
1 為什么用cmake,這里有兩個(gè)問(wèn)題,首先要問(wèn)為什么我需要一個(gè)好的構(gòu)建系統(tǒng)?,下面是主要的原因:
· 你想避免硬編碼路徑
· 您需要在多臺(tái)計(jì)算機(jī)上構(gòu)建一個(gè)包
· 你想使用 CI(持續(xù)集成)
· 你需要支持不同的操作系統(tǒng)
· 你想支持多個(gè)編譯器
· 您想使用 IDE,但不是所有情況
· 你想描述你的程序的邏輯結(jié)構(gòu),而不是標(biāo)志和命令
· 你想使用庫(kù)
· 您想使用其他工具來(lái)幫助您編寫(xiě)代碼 moc ProtoBuf
· 你想使用單元測(cè)試
2 這里有個(gè)重要的需求,就是持續(xù)集成,下面我們來(lái)說(shuō)明一下什么是持續(xù)集成,
· 每次集成都通過(guò)自動(dòng)化的制造(包括提交、發(fā)布、自動(dòng)化測(cè)試)來(lái)驗(yàn)證,準(zhǔn)確地發(fā)現(xiàn)集成錯(cuò)誤。
· 快速錯(cuò)誤,每完成一點(diǎn)更新,就集成到主干,可以快速發(fā)現(xiàn)錯(cuò)誤,定位錯(cuò)誤也比較容易
· 各種不同的更新主干,如果不經(jīng)常集成,會(huì)導(dǎo)致集成的成本變大
· 讓產(chǎn)品可以快速地通過(guò),同時(shí)保持關(guān)鍵測(cè)試合格
· 自動(dòng)化測(cè)試,只要有一個(gè)測(cè)試用例不通過(guò)就不能集成
· 集成并不能刪除發(fā)現(xiàn)的錯(cuò)誤,而是讓它們很容易發(fā)現(xiàn)和改正
3 那又為什么是cmake?下面我們看下cmake的特性就知道為什么要選擇它了:
cmake特性
· 自動(dòng)搜索可能需要的程序、庫(kù)和頭文件的能力
· 獨(dú)立的構(gòu)建目錄,可以安全清理
· 創(chuàng)建復(fù)雜的自定義命令,例如qt moc uic
· 配置時(shí)選擇可選組件的能力
· 從簡(jiǎn)單的文本文件(CMakeLists.txt)自動(dòng)生成工作區(qū)和項(xiàng)目的能力
· 在靜態(tài)和共享構(gòu)建之間輕松切換的能力
· 在大多數(shù)平臺(tái)上自動(dòng)生成文件依賴項(xiàng)并支持并行構(gòu)建
下面再說(shuō)兩個(gè)現(xiàn)實(shí)場(chǎng)景的原因:
· 幾乎每個(gè) IDE 都支持 CMake( CMake 支持幾乎所有IDE)
· 使用 CMake 的軟件包比任何其他構(gòu)建系統(tǒng)都多
三、cmake編譯原理(cmake工作原理)
上面是我畫(huà)的cmake原理流程圖,有些復(fù)雜但基本描述了cmake的工作原理,更多內(nèi)容可以看下cmake的官方手冊(cè) cmake.org.cn
四、cmake編譯(Linux Windows MacOS系統(tǒng)建構(gòu)示例)
1 環(huán)境準(zhǔn)備
參考我的上一篇文章
《cmake使用方法詳解 - Windows Linux MacOS cmake安裝教程》
2 源碼準(zhǔn)備
源碼準(zhǔn)備,三個(gè)平臺(tái)使用同一份c++源碼和cmake配置
· c++源碼
//first_cmake.cpp #include using namespace std; int main(int argc,char *argv[]) { cout<<"first cmake c++"< ? · CMake配置源碼 CMakeLists.txt · cmake_minimum_required 指定最低的cmake版本 · project 項(xiàng)目名稱,后面可以通過(guò)變量獲取此名稱
# CMakeLists.txt cmake_minimum_required (VERSION 3.0) project (first_cmake) add_executable(first_cmake first_cmake.cpp)·目錄結(jié)構(gòu)
CMakeLists.txt文件在根目錄 ,c++源碼first_cmake.cpp和其同一個(gè)目錄。
2 Windows平臺(tái)編譯
CMake=》vs項(xiàng)目=》cl編譯
1 源碼目錄下面創(chuàng)建一個(gè)編譯目錄build,用于生成cmake的臨時(shí)文件和項(xiàng)目文件,放在獨(dú)立的目錄方便清理和查看。
2 進(jìn)入編譯目錄build,直接運(yùn)行cmake .. 使用默認(rèn)生成項(xiàng)目文件,下圖生成的是vs2022的64位項(xiàng)目(文件所在的路徑和目錄層次不能太深,太深會(huì)找不到編譯器)。
3 編譯項(xiàng)目
有兩種編譯方法,第一種直接進(jìn)入build目錄打開(kāi)vs解決方案進(jìn)行編譯.第二種,控制臺(tái)進(jìn)入生成的項(xiàng)目文件路徑 build,然后運(yùn)行 cmake --build . 后面的點(diǎn)表示當(dāng)前路徑。
3 Linux平臺(tái)編譯
1 安裝好gcc編譯工具
sudo apt install g++
sudo apt install make
CMake=》makefile=》make使用gcc或者clang編譯
可以手動(dòng)創(chuàng)建build路徑,然后與上面的windows編譯方法一致。
還有一種方法
1 在CMakeLists.txt文件所在路徑,運(yùn)行
cmake -S . -B build
-S 后面是指定CMakeLists.txt文件的路徑,-B后面是生成的編譯臨時(shí)目錄路徑。
使用默認(rèn)生成項(xiàng)目文件,下圖生成的是makefile + gcc (linux下 c++ 指向g++ ,cc指向gcc)
2 編譯項(xiàng)目
編譯項(xiàng)目也有兩種方法,
一種是直接使用生成的makefile文件
進(jìn)入build目錄輸入 make 編譯項(xiàng)目。
另一種是與windows編譯方法一致,在項(xiàng)目根路徑可以輸入
cmake --build build
后面的build是cmake生成的文件所在路徑
4 Mac平臺(tái)編譯
MacOS下的編譯,基本與linux下一致,當(dāng)然也可以選擇生成為xcode的工程項(xiàng)目:
sudo xcode-select --switch /Applications/Xcode.app/
cmake .. -G "Xcode"
cmake --build .
審核編輯:湯梓紅
-
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7508瀏覽量
88078 -
軟件
+關(guān)注
關(guān)注
69文章
4958瀏覽量
87610 -
開(kāi)源
+關(guān)注
關(guān)注
3文章
3363瀏覽量
42536 -
編譯
+關(guān)注
關(guān)注
0文章
659瀏覽量
32892 -
CMake
+關(guān)注
關(guān)注
0文章
28瀏覽量
1284
原文標(biāo)題:超火的cmake是什么?
文章出處:【微信號(hào):技術(shù)讓夢(mèng)想更偉大,微信公眾號(hào):技術(shù)讓夢(mèng)想更偉大】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論