在安装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