CMakeLists.txt语法规则:条件判断中表达式说明一

一. 简介

前面学习了 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()

下一篇文章继续学习 条件判断中的表达式。

相关推荐
阿钱真强道10 小时前
基于openssl的sm4加密,加密数据,验证OK
linux·网络协议·网络安全
无名修道院10 小时前
AI大模型应用开发-Linux 入门
linux·运维·人工智能·ai大模型应用开发
zzzsde11 小时前
【Linux】基础开发工具(6):版本控制器git&&调试器gdb/cgdb
linux·运维·服务器
努力的小帅11 小时前
Linux_网络基础(1)
linux·网络·网络协议
忧郁的Mr.Li11 小时前
Linux下MySQL8的密码忘记之后重置密码
linux·运维·mysql
叫我辉哥e111 小时前
### Linux命令创意组合大赛技术文章大纲
linux·运维·服务器
EverydayJoy^v^11 小时前
RH134学习进程——九.访问网络附加存储
linux·网络·学习
杜子不疼.11 小时前
【Linux】基础IO(四):用户缓冲区深度解析
linux·运维·服务器·开发语言
海盗123411 小时前
Linux下 vim(vi)编辑器的使用-各种模式介绍
linux·编辑器·vim
春日见11 小时前
三分钟安装window Docker,并与Ubuntu(WSL)建立连接
linux·人工智能·windows·驱动开发·机器学习·docker·容器