CMake
2008年8月20日 22:58
变量赋值 set(VAR a b c) VAR为变量名 a b c 为变量的值用空格分隔
变量使用 ${VAR}
例如: set (Foo a b c)
command (${Foo}) 相当于 command (a b c)
流程控制语句
1. if
some_command(...)
endif(var)
2. foreach and while
foreach (f ${VAR})
message(${f})
endforeach(f)
3. macro and function
macro (hello MESSAGE)
message($ {MESSAGE})
endmacro (hello)
//调用
hello("hello world")
//定义函数
function (hello MESSAGE)
message(${MESSAGE})
endfunction(hello)
//function与macro的区别: function create a local scope for variables.
// macros user the global scope.
正则表达式
^ 匹配 行或字符串的开始
$ 匹配 行或字符串的结尾
. 匹配 除了新行外的任意单个字符
[] 匹配 括号内的任意字符
[^] 匹配 不在括号内的任意字符
[-] 匹配 在"-"两端范围中的字符
* 匹配 0个或多个之前的表达式
+ 匹配 1个或多个之前的表达式
? 匹配 0个或1个之前的表达式
() 保存一个匹配表达式 用于之后的替换
常用命令
ADD_SUBDIRECTORY 添加一个子目录
INCLUDE 从给出的文件中读取CMake listfile代码
INCLUDE(file1 [OPTIONAL])
INCLUDE(module [OPTIONAL])
file中的命令会立即处理 如果使用module代替file1 cmake将会在CMAKE_MODULE_PATH中寻找名为<modulename>.cmake的文件
INCLUDE_DIRECTORIES 添加include目录到build中
INCLUDE_DIRECTORIES([AFTER|BEFORE] [SYSTEM] dir1 dir2)
LINK_DIRECTORIES 指定搜索库的目录
LINK_DIRECTORIES(directory1 directory2 ...)
指定链接程序搜索库的路径
PROJECT 设置项目名
PROJECT (projectname [CXX] [C] [JAVA])
该命令会生成两个变量 projectname_BINARY_DIR与projectname_SOURCE_DIR 后面的选项为项目支持的语言 默认全部支持
SET 给一个CMAKE变量赋值
SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
模块(module)
FindPkgConfig CMake 的pkg-config模块
<PREFIX> 自定义的前缀
pkg_check_modules(<PREFIX> [REQUIRED] <MODULE> [<MODULE>]*)
检测所有给出的modules
设置'REQUIRED'参数后 如果MODULE没有找到会发生错误
该命令会设置以下几个变量
PKG_CONFIG_FOUND 如果pkg-config可以运行在系统中 为TRUE
PKG_CONFIG_EXECUTABLE pkg-config程序的路径
<PREFIX>_FOUND 如果module存在 设置为1
下列生成的变量有两组值 一种使用<PREFIX>作为前缀 另一种使用<PREFIX>_STATIC作为前缀 (在调用pkgconfig时使用--static选项)
<XPREFIX> = <PREFIX> 普通情况下
<XPREFIX> = <PREFIX>_STATIC 为static链接的情况下
<XPREFIX>_LIBRARIES 库
<XPREFIX>_LIBRARY_DIRS 库的路径
<XPREFIX>_LDFLAGS 所有需要的链接选项
<XPREFIX>_LDFLAGS_OTHERS 所有其他的链接选项
<XPREFIX>_INCLUDE_DIRS '-I' 预处理选项
<XPREFIX>_CFLAGS 所有需要的cflags(C编译器的选项)
<XPREFIX>_CFLAGS_OTHERS 其他的编译选项