在安裝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測試
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