国内较好的网站设计公司,镇平网站建设,网络教育平台登录入口,鹿泉建设网站1.双引号
1.1 命令参数
1#xff09;介绍 命令中多个参数之间使用空格进行分隔#xff0c;而 cmake 会将双引号引起来的内容作为一个整体#xff0c;当它当成一个参数#xff0c;假如你的参数中有空格#xff08;空格是参数的一部分#xff09;#xff0c;那么就可以使…1.双引号
1.1 命令参数
1介绍 命令中多个参数之间使用空格进行分隔而 cmake 会将双引号引起来的内容作为一个整体当它当成一个参数假如你的参数中有空格空格是参数的一部分那么就可以使用双引号。 2例子 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 1介绍 如果 target-name 是 add_executable() 、 add_library() 或 add_custom_target() 定义的目标这些目标在整个工程中必须是唯一的不可出现两个名字相同的目标则条件判断为真否则为假。 2例子 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 如果 path 指定的文件或目录存在则条件判断为真否则为假。需要注意的是 path 必须是文件或目录的全路径也就是绝对路径。 2.3.9 IS_DIRECTORY path 如果 path 指定的路径是一个目录则条件判断为真否则为假同样 path 也必须是一个绝对路径。 IS_ABSOLUTE path 如果给定的路径 path 是一个绝对路径则条件判断为真否则为假。 variable|string MATCHES regex 这个表达式用的比较多可以用来匹配字符串可以使用正则表达式进行匹配。 如果给定的字符串或变量的值与给定的正则表达式匹配则为真否则为假。 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 如果给定的变量已经定义则条件判断为真否则为假只要变量已经被设置定义if 条件判断就 是真至于变量的值是真还是假并不重要。 2.3.11 variable|string LESS variable|string 如果左边给定的字符串或变量的值是有效数字并且小于右侧的值则为真。否则为假。 2.3.12 variable|string GREATER variable|string 如果左边给定的字符串或变量的值是有效数字并且大于右侧的值则为真。否则为假。 2.3.13variable|string EQUAL variable|string 如果左边给定的字符串或变量的值是有效数字并且等于右侧的值则为真。否则为假。 3.循环语句 3.1foreach 1基本语法 foreach(loop_var arg1 arg2 ...)command1(args ...)command2(args ...)...
endforeach(loop_var) endforeach 括号中的 loop_var 可写可不写如果写了就必须和 foreach 中的 loop_var 一致。 # foreach 循环测试
set(my_list hello world china)
foreach(loop_var ${my_list})message(${loop_var})
endforeach() 打印输出信息如下 2RANGE 关键字 foreach(loop_var RANGE stop)
foreach(loop_var RANGE start stop [step]) 对于第一种方式循环会从 0 到指定的数字 stop 包含 stop stop 不能为负数。 对于第二种循环从指定的数字 start 开始到 stop 结束步长为 step 不过 step 参数是一个可选参数如果不指定默认 step1 三个参数都不能为负数而且 stop 不能比 start 小。 3IN关键字 foreach(loop_var IN [LISTS [list1 [...]]][ITEMS [item1 [...]]]) 循环列表中的每一个元素或者直接指定元素。 3.2while while(condition)command1(args ...)command1(args ...)...
endwhile(condition) endwhile 括号中的 condition 可写可不写如果写了就必须和 while 中的 condition 一致。 cmake 中 while 循环的含义与 C 语言中 while 循环的含义相同但条件 condition 为真时执行循环体中的命令而条件 condition 的语法形式与 if 条件判断中的语法形式相同。 3.3break/continue break()命令用于跳出循环和在 C 语言中的作用是一样的。 continue() 命令用于结束本次循环执行下一次循环。 4.math 用到之后再学习