CMake入门教程【基础篇】条件语句(if)

文章目录

    • if语句语法
      • 比较运算符
      • 字符串比较
      • 文件和目录判断
      • 变量判断
      • 布尔表达式
      • 正则表达式匹配
      • 函数和宏判断
    • 示例应用
      • 比较运算符示例
      • 字符串比较示例
      • 文件和目录判断示例
      • 变量判断示例
      • 布尔表达式示例
      • 正则表达式匹配示例
      • 函数和宏判断示例
    • 结论

if语句
比较运算符
字符串比较
文件和目录判断
变量判断
布尔表达式
正则表达式匹配
函数和宏判断

if语句语法

在CMake中,if语句是用于条件判断和分支控制的重要工具。以下是一些常用的CMake if语句语法和它们的用途:

比较运算符

  • EQUALNOT EQUALLESSGREATERLESS EQUALGREATER EQUAL:用于数值比较。

字符串比较

  • STREQUALSTRLESSSTRGREATER:用于字符串的比较。

文件和目录判断

  • EXISTSIS_DIRECTORYIS_FILE:检查文件或目录是否存在。

变量判断

  • DEFINEDNOT DEFINED:判断变量是否被定义。

布尔表达式

  • NOTANDOR:逻辑运算符,用于组合条件。

正则表达式匹配

  • MATCHES:检查字符串是否符合正则表达式。

函数和宏判断

  • FUNCTION_EXISTSMACRO_EXISTS:检查函数或宏是否存在。

这些语法元素在CMake脚本中极为重要,可以帮助你根据不同的条件执行相应的操作。更详细的语法说明和示例可以在CMake的官方文档中找到。

示例应用

比较运算符示例

set(NUMBER 10)if(NUMBER EQUAL 10)message("Number is equal to 10")
endif()if(NUMBER GREATER 5)message("Number is greater than 5")
endif()

字符串比较示例

set(STRING1 "Hello")
set(STRING2 "World")if(STRING1 STREQUAL STRING2)message("Strings are equal")
else()message("Strings are not equal")
endif()

文件和目录判断示例

if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/file.txt)message("File exists")
endif()if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/directory)message("Directory exists")
endif()

变量判断示例

set(VARIABLE "SomeValue")if(DEFINED VARIABLE)message("Variable is defined")
else()message("Variable is not defined")
endif()

布尔表达式示例

set(CONDITION1 TRUE)
set(CONDITION2 FALSE)if(NOT CONDITION1 AND CONDITION2)message("Both conditions are true")
endif()if(CONDITION1 OR CONDITION2)message("At least one condition is true")
endif()

正则表达式匹配示例

set(STRING "Hello World")if(STRING MATCHES "Hello")message("String matches the pattern")
endif()

函数和宏判断示例

function(my_function)message("Inside my_function")
endfunction()if(FUNCTION_EXISTS my_function)message("my_function exists")
endif()if(NOT FUNCTION_EXISTS other_function)message("other_function does not exist")
endif()

结论

if语句在CMake脚本中扮演着关键角色,它提供了灵活性和控制力来根据不同条件执行不同的脚本部分。通过熟练运用这些语句,你可以创建更可靠、更灵活的CMake脚本,以应对复杂的构建需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/592497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT 进行 SEO的使用技巧

搜索引擎优化 (SEO) 是使网站对搜索引擎友好的一种不断发展的实践。 自搜索引擎和新兴技术的发展以来,它从未保持不变。 最近发布的 ChatGPT 是一种人工智能对话工具,似乎在搜索引擎优化方面有很好的应用。 从创建吸引人的标题到只需一个简短的提示就可…

QML 中自定义虚拟键盘

作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 我们知道 Qt 中虚拟键盘模块遵循的是 GPL 协议,是不可用于商业发布的。如果项目中使用了 Qt 自带的虚拟键盘&#xff…

解决java接口使用spring-validation验证入参类型为List校验不生效的问题

由于 List 是接口,无法直接用于参数验证,但可以通过实现类重写 List 接口,把此实现类作为校验dto即可 dto标记: 一、直接使用 List 入参类型,不生效示例: @ApiOperation(value = "公共测试接口")@PostMapping("/testPublicApi")public CommonResult&…

vue +elementui 项目登录通过不同账号切换侧边栏菜单的颜色

前景提要:要求不同权限账号登录侧边栏颜色不一样。分为 theme:1代表默认样式,theme:2代表深色主题样式。 1.首先定义一个主题文件 theme.js,定义两个主题样式 // 主要是切换菜单栏和菜单头部主题的设计,整体主题样式切…

【7z压缩包】7z压缩包没密码怎么办

7z压缩包设置了密码,解压的时候就需要输入正确对密码才能顺利解压出文件,正常当我们解压文件或者删除密码的时候,虽然方法多,但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么,忘记了7z压缩包的密码…

牙科废水处理设备详细介绍

诸城市鑫淼环保小编带大家了解一下牙科废水处理设备详细介绍 原理: 牙科废水处理设备通常采用物理、化学和生物处理技术,结合多个步骤进行处理,以将废水中的污染物去除或转化为较为安全的形式。 1.物理处理:包括初级过滤&#xff…

rime中州韵 输入字符透传 lua Translator

在 rime中州韵 help lua Translator 中我们分享了如何使用 lua 脚本定义一个 translator,并以 五笔・拼音 为例引用了该 translator,并且达到了预期的效果。 今天,我们继续通过 lua 脚本为 rime中州韵/小狼毫 输入法打造一个 translator&…

使用Spring Retry优雅的实现业务异常重试

在系统中经常遇到业务重试的逻辑,比如三方接口调用,timeout重试三遍,异常处理重试的兜底逻辑等。那你是不是还在用下面这种方式呢: 我想大家可能很多时候也会这么写,这是能想到的第一个方法,但是我们这段代…

Ant Design Vue 编译后的网页特点是什么,怎么确认他是用的前端 Ant Design Vue 技术栈的呢?

Ant Design Vue 是一个前端 UI 框架,使用 Vue.js 构建。它包含了大量的预设样式和组件,如按钮、表单、表格等,可以帮助开发者快速构建出优雅且功能丰富的网页。但是,要确定一个编译后的网页是否使用了 Ant Design Vue,…

【算法】利用分治思想解算法题:快排、归并、快速选择实战(C++)

1. 分治思想 介绍 分治法将问题划分成多个相互独立且相同或类似的子问题,然后递归地解决每个子问题,并将结果合并以得到原始问题的解。 分治思想通常包含以下三个步骤: 分解:将原始问题划分成多个规模较小、相互独立且类似的子…

单片机大小端模式

单片机大小端模式 参考链接 单片机干货-什么是大小端_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Ju4y1M7Tx/?spm_id_from333.337.search-card.all.click&vd_sourcee821a225c7ba4a7b85e5aa6d013ac92e 特此记录 anlog 2024年1月2日

在C++程序中调用被C编译器编译后的函数(使用extern “C“),举例详细说明

在C编程中,有时候我们需要调用由C编译器编译后生成的函数。然而,由于C和C在函数命名规则和调用约定上存在差异,直接在C代码中调用这些C函数会导致编译错误或运行时错误。为了解决这个问题,我们需要使用extern "C"来告诉…

response.setheader用法详解

response.setheader用法详解 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,让我们深入探讨一项在Web开发中常用的技术——response.setheader的用…

文本到3D肖像最强生成方案!DiffusionGAN3D: 3D GANs和Diffusion先验强强联合!

本文介绍了一个新型框架DiffusionGAN3D,旨在改善文本引导的3D域适应和生成,以及解决现有方法在这些任务中存在的问题,如 inflexibility(缺乏灵活性)、instability(不稳定性)和low fidelity&…

Linux驱动学习—设备树及设备树下的platform总线

1、什么是设备树? 设备树是一种描述硬件资源的数据结构。他通过bootloader将硬件资源传给内核,使得内核和硬件资源 描述相对独立。 2、设备树的由来 2.1 平台总线的由来 要想了解为什么会有设备树,设备树是怎么来的,我们就要先…

计算机毕业论文内容参考|基于Apriori算法的门诊药物推荐系统的设计与实现

文章目录 摘要:前言相关技术与方法介绍系统分析系统设计系统实现系统测试与优化总结与展望摘要: 本文详细介绍了一种基于Apriori算法的门诊药物推荐系统的设计与实现。该系统利用Apriori算法挖掘患者就诊记录中的药物关联规则,为医生提供药物推荐,从而优化治疗方案。文章首…

2023春季李宏毅机器学习笔记 01 :正确认识 ChatGPT

资料 课程主页:https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.phpGithub:https://github.com/Fafa-DL/Lhy_Machine_LearningB站课程:https://space.bilibili.com/253734135/channel/collectiondetail?sid2014800 一、对Chatgpt的误解…

CISSP 第5章 保护资产的安全

1、资产识别和分类 1.1 敏感数据 1.1.1 定义 敏感数据是任何非公开或非机密的信息,包括机密的、专有的、受保护的或因其对组织的价值或按照现有的法律和法规而需要组织保护的任何其他类型的数据。 1.1.2 个人身份信息PII 个人身份信息(PII&#xff09…

python旅游大数据分析可视化大屏 游客分析+商家分析+舆情分析 计算机毕业设计(附源码)Flask框架✅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题&#xff…

[GKCTF 2020]ez三剑客-eztypecho

[GKCTF 2020]ez三剑客-eztypecho 考点:Typecho反序列化漏洞 打开题目,发现是typecho的CMS 尝试跟着创建数据库发现不行,那么就搜搜此版本的相关信息发现存在反序列化漏洞 参考文章 跟着该文章分析来,首先找到install.php&#xf…