當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]一.背景知識(shí):CMake是為了響應(yīng)對(duì)NLM資助的Insight Segmentation和注冊(cè)工具包(ITK)需要一個(gè)強(qiáng)大的跨平臺(tái)構(gòu)建環(huán)境(作為可見(jiàn)人類項(xiàng)目的一部分)而創(chuàng)建的。它受一個(gè)早期系統(tǒng)(稱為p

一.背景知識(shí):

CMake是為了響應(yīng)對(duì)NLM資助的Insight Segmentation和注冊(cè)工具包(ITK)需要一個(gè)強(qiáng)大的跨平臺(tái)構(gòu)建環(huán)境(作為可見(jiàn)人類項(xiàng)目的一部分)而創(chuàng)建的。它受一個(gè)早期系統(tǒng)(稱為pcmaker,由Ken Martin和其他開(kāi)發(fā)人員創(chuàng)建),支持可視化工具包(VTK)開(kāi)源3D圖形和可視化系統(tǒng)的影響。為了創(chuàng)建CMake,Kitware的Bill Hoffman包括了來(lái)自pcmaker的一些關(guān)鍵想法,并添加了自己的更多功能,考慮采用Unix配置工具的一些功能。最初的CMake實(shí)施是在2000年中期,加速發(fā)展發(fā)生在2001年初。由于其他開(kāi)發(fā)人員納入CMake到自己的系統(tǒng),使得CMake得到了許多改進(jìn)。例如,VXL軟件社區(qū)采用CMake作為其構(gòu)建環(huán)境,提供了許多基本功能。 Brad King添加了幾個(gè)功能,以支持CABLE,自動(dòng)包裝環(huán)境和GCC-XML,以及GE公司研發(fā)對(duì)其測(cè)試基礎(chǔ)架構(gòu)(DART)的支持。而且還增加了其他功能,以支持VTK的構(gòu)建環(huán)境轉(zhuǎn)換為CMake,并支持ParaView,增加一個(gè)并行可視化系統(tǒng),以支持洛斯阿拉莫斯國(guó)家實(shí)驗(yàn)室的高級(jí)計(jì)算實(shí)驗(yàn)室。

特點(diǎn):

CMake是一個(gè)管理操作系統(tǒng)和獨(dú)立編譯方式的、可擴(kuò)展的、開(kāi)源的系統(tǒng)。與許多跨平臺(tái)系統(tǒng)不同的是,CMake被設(shè)計(jì)成一個(gè)結(jié)合本地環(huán)境的系統(tǒng)。簡(jiǎn)單的配置文件放置在每個(gè)源目錄(稱為CMakeLists.txt文件)用于生成標(biāo)準(zhǔn)的構(gòu)建文件(如。makefile在Unix和Windows MSVC項(xiàng)目/工作空間)用于通常的方式。CMake可以生成一個(gè)本地編譯源代碼的構(gòu)建環(huán)境,創(chuàng)建庫(kù),生成包裝器和構(gòu)建可執(zhí)行文件的任意組合。CMake支持in-place和out-of-place構(gòu)建,因此可以支持多個(gè)構(gòu)建從單個(gè)源樹(shù)。CMake還支持靜態(tài)和動(dòng)態(tài)庫(kù)的構(gòu)建。它的另一個(gè)特點(diǎn)是生成一個(gè)緩存文件,叫CMakeCache.txt,該文件將會(huì)和一個(gè)圖形化編輯器一起使用。例如,當(dāng)CMake運(yùn)行時(shí),它位于文件、庫(kù)和可執(zhí)行文件,可能會(huì)遇到可選指令。這些信息是集中在緩存中的,這使得用戶可以改變了前一個(gè)的本地構(gòu)建文件。

CMake 的特點(diǎn)主要有:

1,跨平臺(tái),并可生成 native 編譯配置文件,在 Linux/Unix 平臺(tái),生成 makefile,在蘋果平臺(tái),可以生成 xcode,在 Windows 平臺(tái),可以生成 MSVC 的工程文件。

2,能夠管理大型項(xiàng)目。

3,簡(jiǎn)化編譯構(gòu)建過(guò)程和編譯過(guò)程。CMake的工具鏈非常簡(jiǎn)單:cmake+make。

4,可擴(kuò)展,可以為 CMake編寫特定功能的模塊,擴(kuò)充 CMake功能

二.安裝 CMake

cmake 目前已經(jīng)成為各大 Linux 發(fā)行版提供的組件,如Ubuntu中,apt-get install cmake即可,如需要圖形界面,輸入命令:apt-get install cmake-qt-gui即可。如果你使用的操作系統(tǒng)(比如 Windows 或者某些 Linux 版本)沒(méi)有提供 cmake 或者包含的版本較舊,建議你直接從 cmake 官方網(wǎng)站下載安裝。

http://www.cmake.org/HTML/Download.html

在這個(gè)頁(yè)面,提供了源代碼的下載以及針對(duì)各種不同操作系統(tǒng)的二進(jìn)制下載,可以選擇適合自己操作系統(tǒng)的版本下載安裝。

三.Cmake第一個(gè)程序

? 1.編寫hello.c

? 2. 編寫CMakeLists.txt


? 3. 執(zhí)行cmake .
“.” 代表的意思是當(dāng)前目錄,cmake會(huì)查找該目錄下的CMakeList.txt 文件
? 4.執(zhí)行過(guò)程,生成Makefile


? 5. 執(zhí)行make



四.Cmake語(yǔ)法詳解

? 1.PROJECT

PROJECT(projectname [CXX] [C] [Java])

若是為省略[]中內(nèi)容,就默認(rèn)全部支持

該句話中,隱式的定義了兩個(gè)變量,下面是CMakeCache.txt里面的文件內(nèi)容,里面有各種剛剛系統(tǒng)配置的變量?jī)?nèi)容,下面我們查看兩個(gè)隱藏變量的內(nèi)容:


? 2. ADD_EXECUTABLE

生成可執(zhí)行文件,可以忽略后綴

語(yǔ)法:

1.add_executable( [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1 [source2 ...])

2. add_executable( IMPORTED [GLOBAL])

3. add_executable( ALIAS )

具體更詳細(xì)的可查看官網(wǎng)內(nèi)容說(shuō)明:

網(wǎng)址:

https://cmake.org/cmake/help/v3.7/command/add_executable.html?highlight=add_exe#command:add_executable

? 3. 設(shè)置變量

語(yǔ)法:

SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])


? 4.添加打印信息

語(yǔ)法:

message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR]

"message to display" ...)



當(dāng)執(zhí)行CMake的命令的時(shí)候,stdout里會(huì)顯示STATUS消息,而stderr上顯示其他error消息。

而cmake的gui程序則會(huì)在log里顯示錯(cuò)誤信息。如下圖:


以下是message其他參數(shù)內(nèi)容

STATUS = 非重要消息;

WARNING = CMake 警告, 會(huì)繼續(xù)執(zhí)行;

AUTHOR_WARNING = CMake 警告 (dev), 會(huì)繼續(xù)執(zhí)行;

SEND_ERROR = CMake 錯(cuò)誤, 繼續(xù)執(zhí)行,但是會(huì)跳過(guò)生成的步驟;

FATAL_ERROR = CMake 錯(cuò)誤, 終止所有處理過(guò)程;

? 5.ADD_SUBDIRECTORY

ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])

增加源目錄,二進(jìn)制目錄

? 6.更換輸出路徑

更改EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH兩變量?jī)?nèi)容

把生成可執(zhí)行文件目錄更改為工程目錄的bin文件下,效果如下:



? 7.若是想make install,需要指定make install 目錄

執(zhí)行cmake命令,更改輸出目錄:

cmake –D CMAKE_PREFIX_FILE=/usr/local

查看CMakeCache.txt

前面的只是單獨(dú)的指定目錄,現(xiàn)在,指定需要make install的內(nèi)容。
語(yǔ)法:
install(TARGETS targets... [EXPORT


如:如果我們想檢查編譯環(huán)境的時(shí)候,就可以加入CheckCXXCompilerFlag模塊。


下面是該模塊的內(nèi)容:



具體的macro命令與C語(yǔ)言中的宏類似,而foreach等內(nèi)容跟shell語(yǔ)法類似,這里就不詳細(xì)闡述了。

? 10.find_package

語(yǔ)法:

? find_package( [version] [EXACT] [QUIET] [MODULE] [REQUIRED] [[COMPONENTS] [components...]] [OPTIONAL_COMPONENTS components...] [NO_POLICY_SCOPE])

例:

find_package(OpenCV 3.1.0 REQUIRE)

該命令會(huì)查找和加載外部模塊的設(shè)置

而變量_FOUND將會(huì)被設(shè)置去指明是否找到了該包

語(yǔ)法詳解:

QUIET設(shè)置不顯示找不到包的信息

REQUIRED 如果找不到就會(huì)停止處理并且顯示錯(cuò)誤信息

上述的信息已經(jīng)能簡(jiǎn)單的查找到需要的包了,但是,我們需要更加詳細(xì)的命令來(lái)使程序可讀性更高

find_package跟install類似,有兩種模式:

? 1.Module 模式

該模式被使用為上述的簡(jiǎn)單編寫,cmake會(huì)去CMAKE_MODULE_PATH中需找Find.cmake,如果被找到,將會(huì)去讀取并且執(zhí)行,如果找不到,就會(huì)繼續(xù)去查找安裝目錄的Module中查找,他將會(huì)去查找包,查看他的編號(hào),處理一些需要的信息。

如果沒(méi)有找到怎么辦呢?

就會(huì)調(diào)用下面的Config模式。

? 2.Config 模式

但如果添加了CONFIG 參數(shù),則會(huì)跳過(guò)MODULE模式。

? Config模式將會(huì)去定位一個(gè)配置文件,會(huì)尋找 Config.cmake 或者 -config.cmake模塊。

只要找到了package,就會(huì)定義下列變量:

? _FOUND _INCLUDE_DIRS

? _INCLUDES _LIBRARIES

? _LIBRARIES

? _LIBS _DEFINITIONS

因此,我們可以通過(guò)判斷這些變量來(lái)確定package是否被找到,也可以在包含庫(kù)的時(shí)候使用這些變量。

還可以自己編寫上述兩種配置文件,然后利用:

SET(CMAKE_MODULE_PATH dir)指定查找的目錄

Cmake語(yǔ)法簡(jiǎn)單介紹就到此為止了,想要知道更加詳細(xì)的命令信息,可以去官網(wǎng)的參考文檔中查找相關(guān)的語(yǔ)法,一般在查看大型應(yīng)用的過(guò)程中,都是通過(guò)查看官網(wǎng)的開(kāi)發(fā)文檔來(lái)查看相關(guān)信息,然后通過(guò)cmake-gui修改相關(guān)變量,或者執(zhí)行完cmake命令后,去修改CmakeCache命令。

官網(wǎng)文檔地址:https://cmake.org/cmake/help/v3.7/

下面是筆者在實(shí)踐過(guò)程中的一點(diǎn)小建議:

1. 當(dāng)我們執(zhí)行make前,不可以刪除CMakeLists.txt文件。

2. 當(dāng)我們把一個(gè)已經(jīng)執(zhí)行過(guò)的cmake命令的工程移到其他電腦時(shí),注意刪除CmakeCache.txt文件,再重新執(zhí)行cmake命令。

3. 許多配置是可以在CMakeCache.txt里面修改的,如我們想更改編譯工具,改成arm-linux-gcc。

修改CMakeCache.txt內(nèi)容:


或者CMakeLists.txt里更改。

因?yàn)榻徊婢幾g的時(shí)候需要手動(dòng)配置所調(diào)用的庫(kù)文件,因此可以修改變量CMAKE_EXE_LINKER_FLAGS

4. 可以配合pkg-config使用,具體配置和使用方法,因不是本文重點(diǎn),讀者可以自行查找相關(guān)信息。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉