一. 简介
前面学习了 CMakeLists.txt语法中的 部分常用命令,常量变量,双引号的使用。
前面一篇文章也简单了解了 CMakeLists.txt语法中的条件判断,文章如下:
CMakeLists.txt语法规则:条件判断说明一-CSDN博客
本文继续学习 CMakeLists.txt语法中的条件判断,主要学习 条件判断中的 表达式。
二. CMakeLists.txt语法规则:条件判断中的表达式
前一篇文章简单了解了 CMakeLists.txt语法中条件判断,本文对条件判断中表达式进行学习。
1. <constant> 表达式
在 if(constant)条件判断中,如果 constant 是 1、ON、YES、TRUE、Y 或非零数字,那么这个 if 条件就 是 true;
如果 constant 是 0、OFF、NO、FALSE、N、IGNORE、NOTFOUND、空字符串或以后缀-NOTFOUND 结尾,那么这个条件判断的结果就是 false。
在 cmake 中,可以把 1、ON、YES、TRUE、Y 或非零数字以及 0、OFF、NO、FALSE、N、IGNORE、 NOTFOUND、空字符串或以后缀-NOTFOUND 结尾这些理解为常量,类似于布尔值,而且它们不区分大小写;
如果参数不是这些特定常量之一,则将其视为变量或字符串,并使用除<constant>之外的表达式。
if(ON)
message(true)
else()
message(false)
endif()
输出为:true 。
同理,当 if(ON) 判断替换为 if(YES) 、if(true) 、if(100) 等非 0数字,输出都为 true。
if(0)
message(true)
else()
message(false)
endif()
输出为:false
同理,当 if(0) 判断替换为 if(N) 、if(NO)时,输出也是 输出为:false 。
2. <variable/string> 表达式
在 if(<variable/string>)条件判断中,如果变量已经定义,并且它的值是一个非假常量,则条件为真;否则为假。
注意宏参数不是变量(在 cmake 中也可以使用宏,这个后面再给大家介绍)。
输出为:true
set(GG Hello)
if(GG)
message(true)
else()
message(false)
endif()
输出为:false
set(GG NO)
if(GG)
message(true)
else()
message(false)
endif()
输出为:false
if(GG)
message(true)
else()
message(false)
endif()
3. NOT <expression> 表达式
NOT 其实就类似于 C 语言中的取反,在 if(NOT <expression>) 条件判断中,如果表达式 expression 为真,则条件判断为假;如果表达式 expression 为假,则条件判断为真。
if(NOT GG)
message(true)
else()
message(false)
endif()
输出为: true
因为 GG 变量没有定义,所以 GG 表达式为假,但因为前面有 NOT 关键字,进行取反操作,整个 if 条件判断为真。
输出为:false
if(NOT YES)
message(true)
else()
message(false)
endif()
输出为:true
if(NOT 0)
message(true)
else()
message(false)
endif()
4. <expr1> AND <expr2>表达式
这个就类似于 C 语言中的逻辑与( && ),只有 expr1 和 expr2 同时为真时,条件判断才为真;否则条件判断为假。
输出为:true
if(yes AND on)
message(true)
else()
message(false)
endif()
#输出为:false
if(yes AND no)
message(true)
else()
message(false)
endif()
输出为:false
if(false AND no)
message(true)
else()
message(false)
endif()
下一篇文章继续学习 条件判断中的表达式。