日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cmake的使用-为什么要使用CMake

發(fā)布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cmake的使用-为什么要使用CMake 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

介紹

代碼倉庫地址

https://github.com/zzu-andrew/linux-sys/tree/dfew/CMake

為了將源碼轉(zhuǎn)化為最終用戶可以實際使用的東西,需要使用到編譯器、鏈接器、測試框架、打包系統(tǒng)等,這些都增加了開發(fā)高質(zhì)量、健壯性軟件的復(fù)雜性,雖然一些IDE能夠?qū)⑦@些過程簡化一點,但是開發(fā)跨平臺的軟件并不是總能用到這些IDE的特性。

幸運的是, CMake就是一套可以使上述開發(fā)過程易于管理的一套工具,它涵蓋了從建立代碼工程到發(fā)布包的所有過程everything),CMake不僅涵蓋了所有的開發(fā)流程,還支持廣泛的平臺、工具和不同的編程語言。

CMake使用的幾個階段如下:

  • 階段一、CMake最出名的階段-使用項目描述文件,生成特定平臺的項目文件,這些生成的項目文件適合開發(fā)者結(jié)合(make、Xcode、Visual Studio)使用。
  • 階段二、使用階段一生成的構(gòu)建工具構(gòu)建工程工程(如 make)
  • 階段三、后臺測試管理
  • 階段四、打包管理

上述整個過程CMake都可以通過調(diào)用對應(yīng)的工具完成,甚至構(gòu)建工具(make)也可以被CMake調(diào)用。

建立一個工程

脫離構(gòu)建系統(tǒng),工程只是一個文件的集合。

CMakeLists.txt 是一個平臺無關(guān)的描述文件。CMake使用可讀文件CMakeLists.txt為工程的構(gòu)建,制定了一些規(guī)則,定義了什么文件應(yīng)該編譯以及如何編譯、跑那些測試和創(chuàng)建什么包,使用該描述文件生成特定平臺相關(guān)工程文件。

CMake的基本觀念就是項目同時要擁有一個源碼路徑和二進(jìn)制文件目錄,源碼目錄是放置CMakeLists.txt 文件、源碼文件和一些需要構(gòu)建的文件的地方,源碼目錄通處于git、subversion或者類似工具的版本控制之下。

所有構(gòu)建過程生成的文件都會放置到二進(jìn)制目錄,因此二進(jìn)制目錄通常也被稱為構(gòu)建目錄。本書中傾向于使用構(gòu)建目錄,因為這樣更直觀。CMake調(diào)用構(gòu)建工具(eg: make)、CTest和CPack的過程中會在構(gòu)建目錄中生成一系列的文件,可執(zhí)行文件、庫、測試輸出和包都在構(gòu)建目錄中。CMake還會在構(gòu)建目錄中生成一個名為CMakeCache.txt的特殊文件,用于存儲各種后期運行時可重用的信息,開發(fā)人員不需要關(guān)心CMakeCache.txt文件,后面章節(jié)會討論CMakeCache.txt文件。構(gòu)建工具的項目文件也是在構(gòu)建目錄中創(chuàng)建的(eg:makefile),這些CMake生成的文件不應(yīng)該處于版本控制之下。

在源碼中構(gòu)建

雖然不是很鼓勵這樣做,但是在使用CMake時是可以在源碼的目錄進(jìn)行構(gòu)建的,并將這種構(gòu)建方式稱為內(nèi)源構(gòu)建in-source build,因為這種方式更加簡單,所以開發(fā)者剛開始通常會使用這種構(gòu)建方式。

在源碼目錄進(jìn)行構(gòu)建的主要問題:

  • 源碼和構(gòu)建輸出都混雜在一起,使得工程的管理變得非常的困難
  • 要承擔(dān)源文件可能被構(gòu)建輸出覆蓋的風(fēng)險
  • 許多由構(gòu)建穿件的文件,使得版本控制系統(tǒng)的工作變得更加的困難
  • 清除所有構(gòu)建輸出并使用干凈源碼樹并不是件容易的事情

基于以上原因,不建議開發(fā)人員在源碼中進(jìn)行構(gòu)建,即使是一個簡單的項目

在源碼外構(gòu)建(out-of-source builds)

在源碼外構(gòu)建更加可取,因為:

  • 源碼與構(gòu)建文件測地分離
  • 開發(fā)人員可以為一份源碼創(chuàng)建多個構(gòu)建目錄,比如調(diào)試和發(fā)布版本

本書將始終使用源碼外構(gòu)建,并和遵循源目錄和構(gòu)建目錄位于公共父目錄下的模式,構(gòu)建根目錄將稱為build

一些開發(fā)人員會使用該方法的一些變體,將構(gòu)建目錄作為源目錄的子目錄,這樣做雖然能顧有在源碼外構(gòu)建的大部分優(yōu)勢,但是讓然會有部分內(nèi)源構(gòu)建的部分缺點,除非有很好的理由這樣使用,否則建議將構(gòu)建目錄完全置于源碼樹之外。

生成項目文件

目錄結(jié)構(gòu)定下來后,開發(fā)人員可以運行CMake,它讀入CMakeList.txt文件并在構(gòu)建目錄中創(chuàng)建項目文件。開發(fā)人員通過選擇特定的項目文件生成器,來選擇要創(chuàng)建的項目文件的類型。支持一系列不同的生成器,下表列出了更常用的生成器。

CategoryGenerator ExamplesMulti-config
Visual StudioVisual Studio 15 2017YES
Visual StudioVisual Studio 14 2015YES
XcodeXcodeYES
NinJaNinJaNO
MakefilesUNIX MakefilesNO
MakefilesMSYS MakefilesNO
MakefilesMinGW MakefilesNO
MakefilesNMake MakefilesNO

Multi-config-是否支持多配置構(gòu)建項目,支持就可以在不重新運行CMake的前提下構(gòu)建不同的項目(eg: debug release)

最簡單的調(diào)用CMake方式

  • 在構(gòu)建目錄中將生成器類型和源碼目錄的位置傳遞給cmake
mkdir build cd build cmake -G "Unix Makefiles" ../source

如果省略-G選項,cmake會根據(jù)主機(jī)的平臺選擇默認(rèn)的生成器類型。對于所有的生成器類型,CMake將執(zhí)行一系列的測試并詢問系統(tǒng),以確定如何建立項目文件。這些工作包含驗證編譯器是否工作、確定支持的編譯器特性集和其他的各種任務(wù),在CMake完成之前將會給出類似如下的日志信息:

-- Configuring done -- Generating done -- Build files have been written to: /some/path/build

上面強(qiáng)調(diào)了項目文件的創(chuàng)建,實際上包含兩個步驟-配置和生成。在配置階段,CMake通過讀取CMakeLists.txt文件完成對整個項目的內(nèi)部表示的構(gòu)建。在完成這些之后,生成階段創(chuàng)建項目文件,配置和生成對與基本的CMake使用,并不是很重要,但是在后面的章節(jié)中,配置和生成分離變得很重要。會在Chapter 10, Generator Expressions.章節(jié)中進(jìn)行更加詳細(xì)的介紹。

當(dāng)首次完成CMake的運行時,它將在構(gòu)建目錄中保存一個cmakecase.txt的文件,CMake使用這個文件來保存詳細(xì)信息,這樣當(dāng)它再次運行時,他可以重用第一次計算的信息,并加速項目的生成。后面的章節(jié)將會介紹如何使用該文件在不同的運行之間保留開發(fā)者選項。CMake的gui程序使用將在第5章中進(jìn)行介紹。

運行構(gòu)建工具

此時,項目文件已經(jīng)可用,開發(fā)人員可以按照他們習(xí)慣使用他們選擇的構(gòu)建工具。構(gòu)建目錄將包含必要的項目文件,這些文件可以加載到IDE中、通過命令行工具讀取等,或者CMake能夠代表開發(fā)者調(diào)用構(gòu)建工具如:

cmake --build /some/path/build --config Debug --target MyApp

使用Xcode或Visual Studio這樣IDE的開發(fā)者,更加習(xí)慣這種工作方式。build選項指向生成步驟中使用的構(gòu)建目錄對于支持多配置生成器,config選項指定要構(gòu)建哪個配置,而單個配置生成器將忽略--config選項,詳細(xì)信息將在第13章中進(jìn)行介紹,target選項可以用來告訴構(gòu)建工具要構(gòu)建什么,或者如果省略將構(gòu)建默認(rèn)的目標(biāo)。

雖然在日常開發(fā)中,開發(fā)人員通常自己調(diào)用構(gòu)建工具,但是通過cmake進(jìn)行調(diào)用在腳本驅(qū)動的自動化構(gòu)建中更加的有用。使用這種方法,一個簡單的腳本構(gòu)建如下:

mkdir build cd build cmake -G "Unix Makefiles" ../source cmake --build . --config Release --target MyApp

如果開發(fā)人員想更換不同的生成器,所需要做的就是更改-G參數(shù),然后將cmake將自動調(diào)用正確的構(gòu)建工具。

建議

即使首次使用cmake也建議將構(gòu)建目錄與源碼進(jìn)行完全分離,為相同的源碼目錄設(shè)置兩個設(shè)置跟多不同的構(gòu)建。

跨平臺工作的開發(fā)者,定期使用不同生成器進(jìn)行構(gòu)建

總結(jié)

以上是生活随笔為你收集整理的cmake的使用-为什么要使用CMake的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。