CMake入門(一)

CMake是什么

CMake是一個opensource的軟件項目構(gòu)建管理工具饥伊;它允許開發(fā)者用一種簡單的文本格式進行構(gòu)建參數(shù)的指定肴盏。

為什么使用CMake

如果你之前有過維護軟件包的構(gòu)建和安裝的經(jīng)驗尺借,你就會對CMake有興趣除嘹。
當前很多項目都可以在Linux下用Makefile和在Windows下用Visual Studio進行編譯;這要求開發(fā)者在對應的系統(tǒng)下保持構(gòu)建工具的更新,并且不同系統(tǒng)的構(gòu)建行為保持一致迹卢;如果再引入XCode,這需要更多的構(gòu)建工具徒仓,這樣會是一個問題腐碱。
如果在此基礎上引入可選組件,比如如果系統(tǒng)上有l(wèi)ibjpeg掉弛,項目就支援JPEG症见,這會造成更大的麻煩。
CMake提供了一個簡單的殃饿,易于理解的文件格式來解決上述問題谋作。

如果一個項目有多個開發(fā)者參與,或者這個項目有多個目標平臺乎芳;那么不可避免的需要在多臺PC上進行構(gòu)建遵蚜,不同的PC在開發(fā)環(huán)境上會有差異。

  • 自動進行項目構(gòu)建所需的program奈惑、library吭净、header file的查找能力;
  • 在source tree以外進行構(gòu)建的能力肴甸;
  • 為Qt moc攒钳,SWIG等自動產(chǎn)生復雜的自定義命令的能力;
  • 在configuration階段進行可選組件定制的能力雷滋;
  • 自動從簡單文件文件產(chǎn)生workspace和project的能力不撑;
  • 配置生成靜態(tài)庫/動態(tài)庫的能力;
  • 自動產(chǎn)生文件依賴晤斩,支持并行編譯焕檬;

CMake的基本語法

build的過程由每個目錄下的名為CMakeFileLists.txt的文件組成的一系列文件列表所控制;
CMakeFileLists.txt文件由CMake語句進行項目描述澳泵,CMake語句的語法為:

command( args... )
  • command是命令的名字实愚,CMake是不區(qū)分大小寫的;
  • args是一系列由空格分隔的參數(shù)兔辅,如果參數(shù)中有空格腊敲,參數(shù)需要用雙引號引起來;

變量被引用的格式是${VAR};
多個參數(shù)可以使用set來使之構(gòu)成一個list

set( Foo a b c )

這樣設置的結(jié)果是Foo的值是 a b c;

CMake可以直接訪問系統(tǒng)環(huán)境變量和Windows注冊表维苔;
訪問系統(tǒng)環(huán)境變量的語法:

$Env{ARG}

訪問Windows注冊表:

[HKEY_CURRENT_USER\\Software\\path1\\path2;key]

Hello World

一個簡單的CMakeFileLists.txt的例子

project( Hello )
add_executalbe( Hello Hello.c )

一個稍微復雜的例子

cmake_minimum_required( 2.6 )
project( HELLO )

set( HELLO_SRCS Hello.c File2.c File3.c )
if( WIN32 )
    set( HELLO_SRCS ${HELLO_SRCS} WinSupport.c )
esle()
    set( HELLO_SRCS ${HELLO_SRCS} LinuxSupport.c )
endif()

add_executable( HELLO ${HELLO_SRCS} )

# look for the Tcl library
find_library( TCL_LIBRARY 
    NAMES tcl tcl84 tcl83 tcl82 tcl80
    PATHS /usr/lib /usr/local/lib
    )
if( TCL_LIBRARY )
    target_link_library( Hello ${TCL_LIBRARY} )
endif()

如何運行CMake

通常使用兩種方式運行CMake

cmake-gui
通過桌面或者命令行運行cmake-gui碰辅,打開后UI如下:

[外鏈圖片轉(zhuǎn)存失敗(img-ZwXwlARt-1564383408597)(http://7xqdd5.com1.z0.glb.clouddn.com/cmake-gui.png)]
按照如下步驟進行設置:

  1. 圖示1, 選擇source code所在位置(如果通過cmake-gui path_to_src的方式介时,source code位置已經(jīng)設定好);
  2. 圖示2没宾, 選擇build要產(chǎn)生文件的存放位置凌彬;
  3. 圖示3,configure循衰;如果是第一次執(zhí)行configure铲敛,會彈出對話框讓進行compiler的選擇,指定toolchain file会钝;這樣設置以后伐蒋,configure過程會進行,在圖示4的區(qū)域顯示相關(guān)option迁酸;
  4. 圖示4先鱼,進行相關(guān)參數(shù)或者option的設置;
  5. 圖示5胁出,generate型型,產(chǎn)生指定平臺的build file(Linux的Makefile或者Visual Studio的sln file);

命令行使用cmake

  1. 切換到準備放置binary file的目錄
  2. cmake path_to_src -Doption
  3. make
  4. make install
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末全蝶,一起剝皮案震驚了整個濱河市闹蒜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抑淫,老刑警劉巖绷落,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異始苇,居然都是意外死亡砌烁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門催式,熙熙樓的掌柜王于貴愁眉苦臉地迎上來函喉,“玉大人,你說我怎么就攤上這事荣月」芎牵” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵哺窄,是天一觀的道長捐下。 經(jīng)常有香客問我,道長萌业,這世上最難降的妖魔是什么坷襟? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮生年,結(jié)果婚禮上婴程,老公的妹妹穿的比我還像新娘。我一直安慰自己晶框,他們只是感情好排抬,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布懂从。 她就那樣靜靜地躺著授段,像睡著了一般蹲蒲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侵贵,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天届搁,我揣著相機與錄音,去河邊找鬼窍育。 笑死卡睦,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的漱抓。 我是一名探鬼主播表锻,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼乞娄!你這毒婦竟也來了瞬逊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤仪或,失蹤者是張志新(化名)和其女友劉穎确镊,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體范删,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蕾域,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了到旦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旨巷。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖添忘,靈堂內(nèi)的尸體忽然破棺而出采呐,到底是詐尸還是另有隱情,我是刑警寧澤昔汉,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布懈万,位于F島的核電站,受9級特大地震影響靶病,放射性物質(zhì)發(fā)生泄漏会通。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一娄周、第九天 我趴在偏房一處隱蔽的房頂上張望涕侈。 院中可真熱鬧,春花似錦煤辨、人聲如沸裳涛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽端三。三九已至舷礼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間郊闯,已是汗流浹背妻献。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留团赁,地道東北人育拨。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像欢摄,于是被迫代替她去往敵國和親熬丧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Written with StackEdit. CMake是什么 CMake是一個opensource的軟件項目構(gòu)...
    peterzen閱讀 4,335評論 0 2
  • CMake學習 本篇分享一下有關(guān)CMake的一些學習心得以及相關(guān)使用怀挠。 本文目錄如下: [1析蝴、CMake介紹] [...
    AlphaGL閱讀 12,226評論 11 79
  • 向您的項目添加 C 和 C++ 代碼 本文內(nèi)容 下載 NDK 和構(gòu)建工具 創(chuàng)建支持 C/C++ 的新項目 構(gòu)建和運...
    會飛的大象_閱讀 3,762評論 0 3
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,723評論 0 10
  • 資源 本文檔翻譯自官方 cmake turorial 唆香。更新日期:2018年9月27日嫌变。譯者這里以 windows...
    劉亞彬92閱讀 85,333評論 3 12