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

if(var)
    some_command(...)
endif(var)

2.    foreach and while

set (VAR a b c)
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        其他的编译选项