cmake使用一 —— cmake语法
来源:互联网 发布:淘宝汽车凹陷修复工具 编辑:程序博客网 时间:2024/04/30 21:51
cmake语法
康 林(译)
2012-04-28
Cmake是一个用于生成交叉平台编译工程的工具。它类似autoconf。它产生你所选择的编译环境的本地makefile和workspaces。
英文原文地址:http://www.cmake.org/cmake/help/syntax.html
Cmake的输入是在源码目录下的CMakeLists.txt文件。这个文件可以用include或者 add_subdirectory命令增加入其它的输入文件。
语法
CMakeList.txt文件是由注释、命令和空白字符组成。
注释是由 # 开始,到行结尾。
命令是由:命令名、(、空格分隔的参数、)组成。
例如:command (args….)
上面的command可以是一个命令名;或者是一个宏;也可以是一个函数名。
args是以空格分隔的参数例表(如果参数中包含空格,则要加双引号)
除了用于分隔参数的空白字符(空格、换行号、tabs)都是被忽略不计的。任何包含在双引号中的字符都做为一个参数。一个反斜杠用于转换码。
命令名是大小写不敏感的。
字符串(string)和字符串列表(lists)
CMake的基本数据类型是字符串(string)。CMake也支持由字符串组成的字符串列表。字符串列表可以由;或空格分隔的组成。例如:下面设置变量var是等效的。
set(var a;b;c)
set(var a b c)
字符串列表可以用 foreach命令叠代(iterated)或list命令操作。
变量
CMake支持简单的变量:字符串或字符串列表。用${VAR}语法得到变量的引用。
可以用一个set命令把一个字符串列表设置为一个变量,然后把这个变量传递给需要传递多参数的函数。例如:
set(Foo a b c)
command(${Foo})
上面两行等效 command(a b c)
如果你想传把一个字符串列表做为一个单独的参数传递给函数,用双引号包含它。例如:
Command(“${Foo}”)
等效于:command(“a b c”)
环境变量:
用$ENV{VAR}得到环境变量的引用
设置环境变量:
Set(ENV{VAR} /home)
程序流控制
CMake提供三种程序流控制结构:
1. 条件声明:if
# some_command will be called if the variable's value is not:
# empty, 0, N, NO, OFF, FALSE, NOTFOUND, or -NOTFOUND.
if(var)
some_command(...)
endif(var)
2. 循环控制:foreach 和 while
set(VAR a b c)
# loop over a, b,c with the variable f
foreach(f ${VAR})
message(${f})
endforeach(f)
3. 程序定义:宏或函数(函数在CMake2.6以后的版本才支持)。函数建立本地范围内的变量,宏用于全局范围内。
# define a macro hello
macro(hello MESSAGE)
message(${MESSAGE})
endmacro(hello)
# call the macro with the string "hello world"
hello("hello world")
# define a function hello
function(hello MESSAGE)
message(${MESSAGE})
endfunction(hello)
译者注:
函数可以返回,可以用 return()命令返回。如果要从函数中返回值,只能通过参数返回:
#定义函数 get_lib从给定的目录查找指定的库,并把它传回到参数 lib_FILE中
function(get_lib lib_FILE lib_NAME lib_PATH)
#message("lib_name:""${lib_NAME}")
set(__LIB "__LIB-NOTFOUND")
#message("__LIB:""${__LIB}")
find_library(__LIB ${lib_NAME} ${lib_PATH})
if(__LIB STREQUAL "__LIB-NOTFOUND")
message("don't find ${lib_NAME} librarys in ${lib_PATH}")
return()
endif()
#message("__LIB:""${__LIB}")
set(${lib_FILE} ${__LIB}PARENT_SCOPE)
endfunction(get_lib)
set命令中 PARENT_SCOPE表示传递给函数调用者所拥有的变量
引号、字符串和escapes
一个用双引号包含的字符串,是这个字符串的字面含义。一个字符串能包含多行。例如:
set (MY_STRING "this is a string with a
newline in
it")
也能在字符串中用转义字符
set (VAR "
hello
world
")
message ( "\${VAR} = ${VAR}")
# prints out
${VAR} =
hello
world
标准C的转义字符被支持
message("\n\thello world")
# prints out
hello world
message(hell"o") -> prints hell"o"
message(hell"o") -> prints hell"o"
message(hell\"o\") -> prints hell"o"
引号必须是匹配的
message(hell"o) -> produces this error:
Parse error. Function missing ending ")".
Instead found unterminated string with text "o)
".
message(hell\"o) -> prints hell"o
正则表达式
一些CMake命令(如if和 string),能使用正则表达式或使用正则表达式作为参数。一个简单的形式,一个正则表达式用于在一个序列的字符串中精确查找一个字符。然而在大多时候,一个精确查找是不知道的或者只是匹配最前或者最后字符。所以这里用正则表达式进行不同的转换。Cmake标准是可被描述的。这个描述是基于开源的正则表达式类(Texas Instruments)。
- ^ 匹配一行或一字符串开头
- $匹配一行或一字符串结尾
- .匹配单一字符或一个新行
- [ ]匹配括号中的任一字符
- [^ ] 匹配不在括号内的任一字符
- [-] 匹配指定范围内的字符
- * 匹配0次或多次
- + 匹配一次或多次
- ? 匹配0次或一次
- ()保存匹配的表达式并用随后的替换它
- cmake使用一 —— cmake语法
- cmake使用一 —— cmake语法
- CMake学习笔记(二)——CMake语法
- cmake使用一例
- cmake 使用小结 (一)
- CMake使用二——CMake使用向导
- 6.MariaDB笔记——cmake使用介绍一
- [CMake] CMake的使用
- cmake使用实践(一)
- CMake的使用(一)
- CMake學習(一)——cmake的編譯、安裝及簡單使用(ubuntu)
- cmake 一
- cmake的语法及使用用例
- 使用Cmake
- cmake使用
- CMake 使用
- cmake使用
- Cmake使用
- 导致QTP运行缓慢的常见原因
- 转载1
- QEMU-KVM无法启动
- grep 正则
- 获取焦点所在位置
- cmake使用一 —— cmake语法
- 从开机加电到执行main函数之前的过程(一)
- 返回顶部功能
- UILabel添加发光效果
- 技术学习网站
- 学习使用SkyEye仿真
- WCF Completed 事件执行多次
- Linux下利用rpm包安装mysql
- 字符串:null与"" 的区别