日韩在线免费播放-日韩在线免费av-日韩在线免费-日韩在线毛片-国产高清不卡视频-国产高清不卡

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 大型程序管理神器之CMake

大型程序管理神器之CMake 時間:2018-08-16      來源:未知

一.背景知識:

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

本文引用地址://www.bsfkj.cn/emb/Column/7503.html

特點:

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

CMake 的特點主要有:

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

2,能夠管理大型項目。

3,簡化編譯構建過程和編譯過程。CMake的工具鏈非常簡單:cmake+make。

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

二.安裝 CMake

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

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

在這個頁面,提供了源代碼的下載以及針對各種不同操作系統的二進制下載,可以選擇適合自己操作系統的版本下載安裝。

三.Cmake第一個程序

• 1.編寫hello.c

• 2. 編寫CMakeLists.txt

• 3. 執行cmake .

“.” 代表的意思是當前目錄,cmake會查找該目錄下的CMakeList.txt 文件

• 4.執行過程,生成Makefile

• 5. 執行make

四.Cmake語法詳解

• 1.PROJECT

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

若是為省略[]中內容,就默認全部支持

該句話中,隱式的定義了兩個變量,下面是CMakeCache.txt里面的文件內容,里面有各種剛剛系統配置的變量內容,下面我們查看兩個隱藏變量的內容:

• 2. ADD_EXECUTABLE

生成可執行文件,可以忽略后綴

語法:

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

2. add_executable( IMPORTED [GLOBAL])

3. add_executable( ALIAS )

具體更詳細的可查看官網內容說明:

網址:

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

• 3. 設置變量

語法:

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

• 4.添加打印信息

語法:

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

"message to display" ...)

當執行CMake的命令的時候,stdout里會顯示STATUS消息,而stderr上顯示其他error消息。

而cmake的gui程序則會在log里顯示錯誤信息。如下圖:

以下是message其他參數內容

STATUS = 非重要消息;

WARNING = CMake 警告, 會繼續執行;

AUTHOR_WARNING = CMake 警告 (dev), 會繼續執行;

SEND_ERROR = CMake 錯誤, 繼續執行,但是會跳過生成的步驟;

FATAL_ERROR = CMake 錯誤, 終止所有處理過程;

• 5.ADD_SUBDIRECTORY

ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])

增加源目錄,二進制目錄

• 6.更換輸出路徑

更改EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH兩變量內容

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

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

執行cmake命令,更改輸出目錄:

cmake –D CMAKE_PREFIX_FILE=/usr/local

查看CMakeCache.txt

前面的只是單獨的指定目錄,現在,指定需要make install的內容。

語法:

install(TARGETS targets... [EXPORT <export-name>]

[[ARCHIVE|LIBRARY|RUNTIME|FRAMEWORK|BUNDLE|

PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE]

[DESTINATION <dir>][PERMISSIONS permissions...]

[CONFIGURATION][Debug|Release|...]][COMPONENT <component>][OPTIONAL][NAMELINK_ONLY|NAMELINK_SKIP]] [...])

Install 分為不同的書寫版本

分別為:

1. TARGETS版本的install命令

2. FILES版本的install命令

3. PROGRAMS版本的install命令

4. DIRECTORY版本的install命令

5. SCRIPT和CODE版本的install命令

6. EXPORT版本的install命令

具體命令可以去官網查看區別,現在只闡述較為常用的TARGETS版本的install命令的基本內容。

TARGETS格式的install命令規定了安裝工程中的目標(targets)的規則。可執行文件都被當做RUNTIME目標。靜態鏈接的庫文件總是被當做ARCHIVE目標。模塊庫總是被當做LIBRARY目標。對于動態庫不是DLL格式的平臺來說,動態庫會被當做LIBRARY目標來對待。

• 8.靜態庫和動態庫

ADD_LIBRARY(target [SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)

因此,我們可以

ADD_LIBRARY(hello SHARED source.c)

靜態庫

ADD_LIBRARY(hello STATIC source.c )

但若是想同時構建target名字相同的時候,如:

libhello.so 和libhello.a,該怎么辦呢?

這時候就要用到set_target_properties(target1 target2 ... PROPERTIES prop1 value1 prop2 value2 ...)為一個目標設置屬性。

你能夠使用任何你想要的屬性/值對,并且在隨后的代碼中調用GET_TARGET_PROPERTY命令取出屬性的值。

SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")

OUTPUT_NAME 也是一個屬性。

• 9.Include

導入cmake模塊。

在cmake安裝目錄中,一般有很多cmake模塊讓我們在編寫CmakeLists.txt 的時候導入進去,具體內容如下:

如:如果我們想檢查編譯環境的時候,就可以加入CheckCXXCompilerFlag模塊。

下面是該模塊的內容:

具體的macro命令與C語言中的宏類似,而foreach等內容跟shell語法類似,這里就不詳細闡述了。

• 10.find_package

語法:

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

例:

find_package(OpenCV 3.1.0 REQUIRE)

該命令會查找和加載外部模塊的設置

而變量_FOUND將會被設置去指明是否找到了該包

語法詳解:

QUIET設置不顯示找不到包的信息

REQUIRED 如果找不到就會停止處理并且顯示錯誤信息

上述的信息已經能簡單的查找到需要的包了,但是,我們需要更加詳細的命令來使程序可讀性更高

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

• 1.Module 模式

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

如果沒有找到怎么辦呢?

就會調用下面的Config模式。

• 2.Config 模式

但如果添加了CONFIG 參數,則會跳過MODULE模式。

• Config模式將會去定位一個配置文件,會尋找 Config.cmake 或者 -config.cmake模塊。

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

• _FOUND _INCLUDE_DIRS

• _INCLUDES _LIBRARIES

• _LIBRARIES

• _LIBS _DEFINITIONS

因此,我們可以通過判斷這些變量來確定package是否被找到,也可以在包含庫的時候使用這些變量。

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

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

Cmake語法簡單介紹就到此為止了,想要知道更加詳細的命令信息,可以去官網的參考文檔中查找相關的語法,一般在查看大型應用的過程中,都是通過查看官網的開發文檔來查看相關信息,然后通過cmake-gui修改相關變量,或者執行完cmake命令后,去修改CmakeCache命令。

官網文檔地址:https://cmake.org/cmake/help/v3.7/

下面是筆者在實踐過程中的一點小建議:

1. 當我們執行make前,不可以刪除CMakeLists.txt文件。

2. 當我們把一個已經執行過的cmake命令的工程移到其他電腦時,注意刪除CmakeCache.txt文件,再重新執行cmake命令。

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

修改CMakeCache.txt內容:

或者CMakeLists.txt里更改。

因為交叉編譯的時候需要手動配置所調用的庫文件,因此可以修改變量CMAKE_EXE_LINKER_FLAGS

 

4. 可以配合pkg-config使用,具體配置和使用方法,因不是本文重點,讀者可以自行百度查找相關信息。更多CMake相關內容請點擊:cmake 簡介

上一篇:FreeModbus溫濕度傳感器試驗

下一篇:linux make命令安裝詳解

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 少林七崁| 今天是你的生日合唱谱二声部| 749局什么时候上映| footjob videos| 黑衣人| 啊嗯啊| 下载抖音正版| 吴妍儿| 老司机免费看视频| 那些花儿吉他谱原版| 阴道| 雾里看花电视剧| 守护大电影| 爱的重生| 速度与激情特别行动| 熊出没免费电影| barbapapa| 安多卫视直播在线观看| 乔治娅·格洛梅| (一等奖)班主任经验交流ppt课件| 电影《uhaw》完整版在线观看| 译制片《桥》| 小曼哈顿| 监视韩国电影播放| 情侣不雅视频| 婚外情第一季| 搬山道人| 邵雨琪| 《无人生还》电影在线观看| 植田圭辅| 孙苏雅| 戴夫·巴蒂斯塔| 西藏卫视节目表| 爱情三选一| 蓝家宝电影| 韩国电影《甜性涩爱》| 三年电影免费完整版| 女生操| 低糖食物一览表| 爱情洗牌| 欧布奥特曼普通话版|