因為原先ubuntu自帶的cmake有點舊,就想著安裝個最新的,可是直接安裝卡在了某一步上,后面有說明。現將正確的安裝方法列出來。
1.卸載原有的版本
sudo?apt-get?autoremove?cmake
2.?下載最新的cmake?:https://cmake.org/download/
3.?解壓:tar?-xzvf?cmake.tgz
?進入解壓的文件;?cd?cmake
????????????????????????????????依次執行?./bootstrap??(這一步我之前出錯過,不知道為什么,我卸載掉舊的就好了。)
make
make?install(需在root下進行)
后來看到了:?http://www.cnblogs.com/skyofbitbit/p/3699968.html?提到:
如果還沒有安裝CMake,源碼樹中提供了一個?bootstrap?腳本:
./bootstrap
make
make?install?
(注:make?install?一步是可選的,CMake?可以在編譯目錄下運行。)
一個已經安裝了的CMake也可以用于編譯新版本的CMake:
cmake?.
make
make?install
(注:make?install?一步是可選的,CMake?可以在編譯目錄下運行。)
附:
轉: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版本?。
1、安裝
有好幾種安裝CMake?的方法,因你所用的平臺而異。
(1)從源碼安裝
Windows
在CMake?下載頁面?上有已編譯好的二進制包。它提供的是一個可執行的安裝程序。你還可以下載源碼包并從源碼包編譯CMake。CMake下載頁面還提供了已釋出的源碼和訪問CVS的指令。
為了從源碼樹編譯CMake,你必須先要安裝最新的CMake二進制版本,因為要用它來編譯源碼樹。一旦裝好了二進制版本的CMake,你就可以像編譯其他項目一樣使用CMake編譯CMake了。一般來說,這意思是你要選擇CMake源碼目錄作為源目錄,然后再指定編譯出來的可執行程序結果的位置。
Linux,?Mac?OSX,?UNIX?&?Cygwin
在CMake?下載頁面?上有許多UNIX平臺上已經編譯好的二進制包。
下面有幾種從源碼樹編譯CMake的方法:
解壓:tar?xvf?cmake-2.8.8.tar.gz
進入解壓目錄:cd?cmake-2.8.8
進行如下操作:(選擇適合自己的操作步驟)
如果還沒有安裝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
?
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?.
?
3、??CMake?cache
cmake第一次運行的時候,它將產生一個文件叫CMakeCache.txt,該文件可以被看作一個配置文件,它里面的內容就像傳遞給configure命令的參數集,CMake?GUI可以幫你很容易修改它,當然也可以直接對該文件做修改;如果你的CMakeLists.txt文件做過較大幅度的修改,你需要從cache中刪除相關的選項,如果你還沒有手動編輯過cache文件,在你重新運行cmake之前需刪除它。
4、????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個先前的字符序列
():保存一個匹配的表達式,以便以后使用