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()

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

相关推荐
小哈里3 小时前
【知识】从学科到实践:自然・工程・社科・人文|算法・研发・产品・品牌设计
程序人生·算法·产品·设计·工程
H_oRIZoN_4 小时前
Linux入门DAY41(51 单片机 串口与通信协议)
linux·运维·单片机
GeW6 小时前
RHCE备考别瞎学!按这个计划走,30天提高通过率,快速拿证
linux
Escalating_xu6 小时前
【System V 信号量】从 P/V 原语到 Builder 封装:写出可控、可清理的进程互斥组件
java·linux·开发语言·jvm
傲世仙尊6 小时前
System V 进程间通信详解:共享内存、消息队列与信号量(CSDN博客)
linux·开发语言·c++
码农小韩6 小时前
Linux应用开发(六)——进程间通信
linux·linux驱动·嵌入式软件开发·嵌入式操作系统·linux应用
笨笨饿7 小时前
#138_解决Codex要五次回复的问题
linux·stm32·单片机·嵌入式硬件·mcu·物联网·嵌入式实时数据库
m0_459872927 小时前
Linux 系统基础
linux·运维·服务器
吴声子夜歌8 小时前
Shell编程——数组
linux·运维·shell
blueSatchel8 小时前
ros-humble仿真-建图-导航
linux·ros2