用“#”进行注释,开始到行尾结束;
set(var 711) # 定义变量值
message("var = ${var}")
message("PATH = $ENV{PATH}") # 环境变量
true:1, ON, YES, TRUE, Y, 非0的值
false:0, OFF, NO, FALSE, N, IGNORE, NOTFOUND, 空字符串””, 以-NOTFOUND 结尾的字符串
set(true 1)
set(false OFF)
message("true = " ${true})
message("false = " ${false})
set(list_var 1 2 3 4) # list_var = 1;2;3;4
set(list_foo "5;6;7;8") # list_foo = 5;6;7;8
message(${list_var})#输出: 1234
message(${list_foo})#输出:5678
message("${list_var}")#输出:1;2;3;4
message("${list_foo}")#输出:5;6;7;8
在cmake中,条件语句,循环语句,函数或者宏,都是命令。
操作符优先级:一元>二元>逻辑
逻辑
NOT, AND, OR
一元
EXISTS, COMMAND, DEFINED.
二元
EQUAL, LESS, LESS_EQUAL, GREATER, GREATER_EQUAL, STREQUAL,STRLESS, STRLESS_EQUAL, STRGREATER, STRGREATER_EQUAL,VERSION_EQUAL, VERSION_LESS, VERSION_LESS_EQUAL, VERSION_GREATER, VERSION_GREATER_EQUAL,MATCHES
if(表达式)
# 要执行的命令块
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
elseif(表达式2)
# 要执行的命令块
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
else(表达式)
# 要执行的命令块
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
endif(表达式)
while(表达式)
# 要执行的命令块
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
# break 退出循环
# continue 退出当前轮循环,继续下次循环
endwhile(表达式)
foreach(循环变量 参数1 参数2 ...)
# 要执行的命令块
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
endforeach(循环变量)
命令可以带字符串参数,但没有返回值。命令名是大小写不敏感的,所以SET和set表示同一个命令,但是命令带的参数名是大小写敏感的ARG和arg是两个不同的参数。
#自定义函数命令格式:
function( [arg1 [arg2 [arg3 ...]]])
# 自定义命令块
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
endfunction()
#调用
name( [arg1 [arg2 [arg3 ...]]])
macro( [arg1 [arg2 [arg3 ...]]])
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
endmacro()