轉:CMake安裝和使用

 
CMake是一個跨平臺的安裝(編譯)工具,能夠用簡單的語句來描述全部平臺的安裝(編譯過程)。他可以輸出各類各樣的makefile或者project文件,能測試編譯器所支持的C++特性,相似UNIX下的automake。只是 CMake 的組態檔取名爲 CmakeLists.txt。Cmake 並不直接建構出最終的軟件,而是產生標準的建構檔(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),而後再依通常的建構方式使用。這使得熟悉某個集成開發環境(IDE)的開發者能夠用標準的方式建構他的軟件,這種可使用各平臺的原生建構系統的能力是 CMake 和 SCons 等其餘相似系統的區別之處。
CMake 能夠編譯源代碼、製做程式庫、產生適配器(wrapper)、還能夠用任意的順序建構執行檔。CMake 支持 in-place 建構(二進檔和源代碼在同一個目錄樹中)和 out-of-place 建構(二進檔在別的目錄裏),所以能夠很容易從同一個源代碼目錄樹中建構出多個二進檔。CMake 也支持靜態與動態程式庫的建構。
「CMake」這個名字是「cross platform make」的縮寫。雖然名字中含有「make」,可是CMake和Unix上常見的「make」系統是分開的,並且更爲高階。
 
下載:
      在安裝metis-5.0時,安裝說明中要求必須安裝CMake2.8版本,下面是CMake的安裝和使用方法,記錄下來以便之後學習。
在網址 http://www.cmake.org/ 下載你所須要的CMake源碼包cmake-2.8.8.tar..gz(版本不一樣,壓縮包後綴不一樣),分爲Unix/linux版本 和 windows版本 。

一、安裝
有好幾種安裝CMake 的方法,因你所用的平臺而異。
(1)從源碼安裝

Windows
在CMake 下載頁面 上有已編譯好的二進制包。它提供的是一個可執行的安裝程序。你還能夠下載源碼包並從源碼包編譯CMake。CMake下載頁面還提供了已釋出的源碼和訪問CVS的指令。html

爲了從源碼樹編譯CMake,你必須先要安裝最新的CMake二進制版本,由於要用它來編譯源碼樹。一旦裝好了二進制版本的CMake,你就能夠像編譯其餘項目同樣使用CMake編譯CMake了。通常來講,這意思是你要選擇CMake源碼目錄做爲源目錄,而後再指定編譯出來的可執行程序結果的位置。linux


Linux, Mac OSX, UNIX & Cygwin
在CMake 下載頁面 上有許多UNIX平臺上已經編譯好的二進制包。正則表達式

下面有幾種從源碼樹編譯CMake的方法:bootstrap

解壓:tar xvf cmake-2.8.8.tar.gzwindows

進入解壓目錄:cd cmake-2.8.8app

進行以下操做:(選擇適合本身的操做步驟)函數

若是尚未安裝CMake,源碼樹中提供了一個 bootstrap 腳本:
./bootstrap
make
make install
(注:make install 一步是可選的,CMake 能夠在編譯目錄下運行。)工具

一個已經安裝了的CMake也能夠用於編譯新版本的CMake:
cmake .
make
make install
(注:make install 一步是可選的,CMake 能夠在編譯目錄下運行。)學習

在UNIX上,若是你不是使用的GNU C++編譯器,你要告訴bootstrap 腳本你想用哪一個編譯器。這能夠在運行configure命令前經過設置CC和CXX環境變量完成。例如,在一個帶有7.3X編譯器的SGI平臺上,你能夠像下面這樣編譯CMake:
(setenv CXX CC; setenv CC cc; ./bootstrap)
make
make install
要查看bootstrap腳本的詳細參數,請執行 ./bootstrap –help測試

(2)從二進制安裝

sudo apt-get install cmake

 

二、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 .

 

三、  CMake cache

cmake第一次運行的時候,它將產生一個文件叫CMakeCache.txt,該文件能夠被看做一個配置文件,它裏面的內容就像傳遞給configure命令的參數集,CMake GUI能夠幫你很容易修改它,固然也能夠直接對該文件作修改;若是你的CMakeLists.txt文件作過較大幅度的修改,你須要從cache中刪除相關的選項,若是你尚未手動編輯過cache文件,在你從新運行cmake以前需刪除它。

四、    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的值不爲empty,0,N,NO,OFF,FALSE,NOTFOUND

-NOTFOUND,some_command(...)將被執行

。循環

set(VAR a b c)

foreach(f ${VAR})

message(${f})

        endforeach(f)

用變量f依次代替a,b,c執行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或多個先前的字符序列

?:匹配0或1個先前的字符序列

():保存一個匹配的表達式,以便之後使用

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

相關文章
相關標籤/搜索