1.双引号
1.1 命令参数
1)介绍
命令中多个参数之间使用空格进行分隔,而 cmake 会将双引号引起来的内容作为一个整体,当它当成一个参数,假如你的参数中有空格(空格是参数的一部分),那么就可以使用双引号。
message(Hello World)
message("Hello World")
第一个 message 命令传入了两个参数,而第二个 message 命令只传入一个参数;
在第一个 message 命令中,打印信息时,会将两个独立的字符串 Hello 和 World 都打印出来,而且World 会紧跟在Hello 之后。而第二个 message 命令只有一个参数。
HelloWorld
Hello World
1.2引用变量
1)介绍
加上“ ”可以让cmake把这个数组的所有元素当成一个整体,而不是分散的个体。
2)例子
(1)
不加双引号
# CMakeLists.txt
set(MY_LIST Hello World China)
message(${MY_LIST})
执行结果
HelloWorldChina
(2)
加双引号
# CMakeLists.txt
set(MY_LIST Hello World China)
message("${MY_LIST}")
执行结果
Hello;World;China
2.条件判断
2.1格式
if(expression)# then section.command1(args ...)command2(args ...)...
elseif(expression2)# elseif section.command1(args ...)command2(args ...)...
else(expression)# else section.command1(args ...)command2(args ...)...
endif(expression)
2.2 expression表达式
2.3表达式详解
2.3.1 <constant>
在 cmake 中,可以把 1、ON、YES、TRUE、Y 或非零数字以及 0、OFF、NO、FALSE、N、IGNORE、NOTFOUND、空字符串或以后缀-NOTFOUND 结尾这些理解为常量,类似于布尔值,而且它们不区分大小 写;如果参数不是这些特定常量之一,则将其视为变量或字符串,并使用除<constant>之外的表达式。
2.3.2 <variable/string>
在 if(<variable/string>)条件判断中,如果变量已经定义,并且它的值是一个非假常量,则条件为真;否则为假,注意宏参数不是变量。
真:变量定义+非假常量
假:未定义/假常量
2.3.3 NOT <expression>
NOT 其实就类似于 C 语言中的取反,在 if(NOT <expression>)条件判断中,如果表达式 expression 为真,则条件判断为假;如果表达式 expression 为假,则条件判断为真。
2.3.4 <expr1> AND <expr2>
类似于 C 语言中的逻辑与(&&),只有 expr1 和 expr2 同时为真时,条件判断才为真;否则条件判断为假。
2.3.5 <expr1> OR <expr2>
类似于 C 语言中的逻辑或(||),当 expr1 或 expr2 至少有一个为真时,条件判断为真;否则为假。
2.3.6 COMMAND command-name
1)介绍
如果 command-name 是一个已经定义的命令、宏或函数时,条件判断为真;否则为假。
2)例子
if(COMMAND yyds)message(true)
else()message(false)
endif()
输出:false
if(COMMAND project)message(true)
else()message(false)
endif()
输出:true
2.3.7 TARGET target-name
if(TARGET hello)message(true)
else()message(false)
endif()
输出为false
add_library(hello hello.c)
if(TARGET hello)message(true)
else()message(false)
endif()
输出为true
2.3.8 EXISTS path
set(MY_STR "Hello World")
if(MY_STR MATCHES "Hello World")message(true)
else()message(false)
endif()
输出为true
set(MY_STR "Hello World")
if("Hello World" MATCHES "Hello World")message(true)
else()message(false)
endif()
输出为true
2.3.9 <variable|string> IN_LIST <variable>
2.3.10 DEFINED <variable>
2.3.11 <variable|string> LESS <variable|string>
2.3.12 <variable|string> GREATER <variable|string>
如果左边给定的字符串或变量的值是有效数字并且大于右侧的值,则为真。否则为假。
2.3.13<variable|string> EQUAL <variable|string>
3.循环语句
3.1foreach
1)基本语法
foreach(loop_var arg1 arg2 ...)command1(args ...)command2(args ...)...
endforeach(loop_var)
# foreach 循环测试
set(my_list hello world china)
foreach(loop_var ${my_list})message("${loop_var}")
endforeach()
打印输出信息如下
2)RANGE 关键字
foreach(loop_var RANGE stop)
foreach(loop_var RANGE start stop [step])
foreach(loop_var IN [LISTS [list1 [...]]][ITEMS [item1 [...]]])
3.2while
while(condition)command1(args ...)command1(args ...)...
endwhile(condition)
3.3break/continue
4.math
用到之后再学习