CMake的安裝和使用

zhouwf0726發表於2019-06-14

1.    cmake安裝

1)從原始碼安裝

下載cmake原始碼cmake-2.6.2.tar.gz

http://www.cmake.org/cmake/resources/software.html

編譯安裝

tar xvf cmake-2.6.2.tar.gz

cd cmake-2.6.2/

如果本機上不存在cmake,則:

./bootstrap

make

make install

如果本機上存在cmake,想安裝一個新版本,則:

cmake .

make

make install

2)從二進位制安裝

sudo apt-get install cmake

2.    cmake執行

1)執行cmake with GUI

如果系統中有curses庫的話,cmake將生成一個可執行檔案ccmake,它是一個基於文字程式的終端,有點類似windows GUI

在原始碼目錄中執行ccmake .,生成的二進位制檔案存放在原始碼目錄下

當然也可以在其他目錄下執行ccmake,只是要指定你想編譯的原始碼的路徑

ccmake的使用

當我們在原始碼目錄下執行ccmake . 時,終端將顯示如下:

 

當我們鍵入c時,ccmake將編譯

當我們鍵入方向鍵時,可以選擇cache entry

當我們鍵入enter時,可以編輯cache entry

當我們鍵入g時,將生成Makefile,然後退出

當我們鍵入h時,將彈出幫助文件

當我們鍵入q時,將退出ccmake

當我們鍵入t時,可以開啟或關閉advanced cache entry

2)執行cmake from the command line

如果原始碼沒有太多的選項(在CMakeCache.txt檔案中),可以只用cmake .來產生Makefile

如果原始碼選項太多,比如VTK,可以把引數-i傳遞給cmake,如:cmake -i .

cmake將讓你為每一個cache file檔案中的選項指定一個值,也能讓你增加新的選項到檔案CMakeCache.txt中,或者使用ccmake,或者使用CMakeSetup

當然,也可以傳遞設定選項的引數給cmake,如:

cmake -DVARIABLE:TYPE=VALUE .

2.    CMake cache

cmake第一次執行的時候,它將產生一個檔案叫CMakeCache.txt,該檔案可以被看作一個配置檔案,它裡面的內容就像傳遞給configure命令的引數集,CMake GUI可以幫你很容易修改它,當然也可以直接對該檔案做修改;如果你的CMakeLists.txt檔案做過較大幅度的修改,你需要從cache中刪除相關的選項,如果你還沒有手動編輯過cache檔案,在你重新執行cmake之前需刪除它。

3.    Cmake語法

1)基本概念

cmake使用Cmake  dfjs;dfasfLists.txt檔案,該檔案用include或者add_subdirectory命令來增加額外的輸入檔案。

註釋行以#開頭到該行結尾

命令是由命令名,加括號,括號中的引數用空白隔開,它可以是內建的命令如add_library,或者使用者定義的巨集或函式

所有的空格,包含空白符,空行,tabs,當然除了用來隔開引數的空白,都被忽略

2)變數

。字串

一個字串是用雙引號括起來的,也可以被分隔在多行,如:

set(MY_STRING “this is a string with a

newline in

it”)

在一個字串中也可以用變數,如:

set(VAR “

hello

world

)

當執行message(“/${VAR}=${VAR}”)後,將列印:

${VAR}=

hello

world

也可以message(“/n/thello world”)後,將列印:

hello world

。字串列表

cmake基本的資料型別為字串,也可以支援字串列表,如:

set(VAR a;b;c)set(VAR a b c)將把VAR設定為字串列表

要使用VAR,可以用${VAR},如:

command(${VAR}),它相當於command(a b c)

如果想把一個字串列表作為單個引數傳遞給命令,可以用雙引號,如:

command(“${VAR}”),相當於command(“a b c”)

3)流程控制

。判斷

if(var)

some_command(...)

        endif(var)

var的值不為empty0NNOOFFFALSENOTFOUND

NOTFOUNDsome_command(...)將被執行

。迴圈

set(VAR a b c)

foreach(f ${VAR})

message(${f})

        endforeach(f)

用變數f依次代替abc執行message()

。巨集和函式定義

定義一個巨集hello

macro(hello MESSAGE)

message(${MESSAGE})

        endmacro(hello)

呼叫巨集hello

hello(“hello world”)

定義一個函式hello

function(hello MESSAGE)

message(${MESSAGE})

        endfunction(hello)

4)正規表示式

很多CMake命令如if,會使用正規表示式作為引數,下面是正規表示式會用到的特殊字元:

^:匹配一行或一個字串的開頭

$:匹配一行或一個字串的結尾

.:匹配單個字元

[]:匹配方括號中任意字元或字串

[^]:匹配不是方括號中的字元或字串

[-]:匹配在dash任意一邊的字元

*:匹配0或多個先前的字元序列

+:匹配1或多個先前的字元序列

?:匹配01個先前的字元序列

():儲存一個匹配的表示式,以便以後使用

參考:http://www.cmake.org/cmake/help/documentation.html

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756652/viewspace-715402/,如需轉載,請註明出處,否則將追究法律責任。

相關文章