什么是CMake
- AS2.2以上,构建原始库的默认工具是Cmake
- CMake是一个跨平台的构建工具,可以用简单的语句来描述所有平台的安装(编译过程)。CMake并不直接构建最终的软件,而是产生其他工具的脚本(如makefile)
注释
- 单行注释 #XXXXX
- 多行注释 #[[XXXXXXX]]
变量
CMake中所有的变量都是string类型。可以使用set()和unset()命令来声明或移除一个变量
变量的引用 ${变量名}
列表(lists)
列表也是字符串,可以把列表看做一个特殊的变量,这个变量有多个值
set(列表名 值1 值2 ... 值N)
或者
set(列表名 "值1;值2;...;值N")
列表的应用 ${列表名}
流程控制-操作符
CMake的操作符都是大小写敏感的
布尔常量值
条件命令
if(表达式)
COMMAND(ARGS ...)
elseif(表达式)
COMMAND(ARGS ...)
else(表达式)
COMMAND(ARGS ...)
循环命令
while(表达式)
COMMAND(ARGS ...)
endwhile(表达式)
break()命令可以跳出整个循环,continue()可以跳出当前循环
循环遍历一
foreach(循环变量 参数1 参数2 ... 参数N)
COMMAND(ARGS ...)
endforeach(循环变量)
例如
foreach(item 1 2 3)
message("item = ${item}")
endforeach(item)
循环遍历二
foreach(循环变量 RANGE total)
COMMAND(ARGS ...)
endforeach(循环变量)
从0循环到total
循环遍历三
foreach(循环变量 RANGE start stop step)
COMMAND(ARGS ...)
endforeach(循环变量)
循环范围从start到stop,循环增量为setp
循环遍历四
foreach(循环变量 IN LISTS 列表名)
COMMAND(ARGS ...)
endforeach(循环变量)
自定义函数
function(func x y z)
message("x = ${x}")
message("y = ${y}")
message("z = ${z}")
message("ARGC = ${ARGC}") #表示传入参数的个数
message("ARGV = ${ARGV}") #表示所有参数的列表 比如1:2:3
message("ARGV0") #参数1
message("ARGV1") #参数2
message("ARGV2") #参数3
endfunction(func) #结尾
func(1 2 3) # 进行调用
自定义宏命令
macro (ma x y z)
message("call macro ma")
message("x = ${x}")
message("y = ${y}")
message("z = ${z}")
endmacro(ma)
ma(1 2 3)
变量的作用域
- 全局层:cache变量,在整个项目范围可见,一般在set定义变量时,指定CACHE参数就能定义为cache变量
- 目录层:在当前目录CMakeLists.txt定义,以及在该文件包含的其他cmake源文件中定义的变量
- 函数层:在命令函数中定义的变量,属于函数作用域的变量