cmake流程控制---cmake数学计算操作和if命令

news2024/9/27 12:14:32

目录

cmake 数学计算操作

demo

if命令

基本表达式

逻辑表达式(NOT AND OR)

比较表达式

正则表达式

demo

文件系统相关

判断是否存在的表达式 


cmake 数学计算操作

有时候我们需要对cmake变量之间进行数学运算,这时候cmake提供了math()这个命令,命令格式如下:

math(EXPR outVar mathExpr [OUTPUT_FORMAT format])

这个命令也是很简单,直接通过cmake变量结合数学运算符组成mathExpr,然后将结果保存到outVar

中.

OUTPUT_FORMAT是可选参数,代表输出结果的格式,可以是

  • HEXADECIMAL:输出16进制结果.
  • DECIMAL:输出10进制结果

demo

message("-------------------------------")
set(x 3)
set(y 7)
math(EXPR zDec "(${x} + ${y}) * 2")
message("zDec = ${zDec}")
math(EXPR zDec "(${x} + ${y}) * 2" OUTPUT_FORMAT DECIMAL)
message("DECIMAL zDec = ${zDec}")
math(EXPR zDec "(${x} + ${y}) * 2" OUTPUT_FORMAT HEXADECIMAL)
message("HEXADECIMAL zDec = ${zDec}")

 

if命令

现在cmake的if()命令格式如下:

 if(<condition>)
   <commands>
 elseif(<condition>) # optional block, can be repeated
   <commands>
 else()              # optional block
   <commands>
 endif()

上述命令格式中,elseif和else是可选的,而且elseif可以有多个,但必须在else之前列出.

其中最重要的就是括号中的表达式,这个用来判断要走那个分支的关键.

基本表达式

if(value)
  • ON,YES,TRUE,Y视为真
  • OFF,NO,FALSE,N,IGNORE,NOTFOUND,空字符串,以-NOTFOUND结尾的字符串被视为假.
  • 如果是一个数字,将根据C语言的规则转换为bool值.
  • 如果上面三种情况都不适用,那该条件表达式将最为一个变量的名字.
    • 如果没有使用引号,那该变量的值会和为假的值对比,如果匹配上则为假,否则为真,如果其值是空字符串则为假.
    • 如果使用引号
      • cmake3.1及以后,如果该字符串不匹配任何为真的值,那该条件表达式为假.
      • cmake3.1以前,如果该字符串匹配到任何存在的变量名字,则会按照变量处理.
    • if(ENV{some_var})这种形式的条件表达式永远为假,所以不要使用环境变量

逻辑表达式(NOT AND OR)

if (NOT expressin)

if (expression1 AND expression2)

if (expression1 OR expression2)

if (NOT (expression1 AND (expression2 OR expression3)))

比较表达式

if (value1 OPERATOR value2)
Number(数字)string(字符串)Version number(版本号)Path(路径)
LESS(小于)STRLESSVERSION_LESS
GREATER(大于)STRGEREATERVERSION_GREATER
EQUAL(等于)STREQUALVERSION_EQUALPATH_EQUAL
LESS_EQUAL(小于等于)STRLESS_EQUALVERSION_LESS_EQUAL
GREATER_EQUALSTRGREATER_EQUALVERSION_GREATER_EQUAL

版本号比较格式:major[.minor[.patch[.tweak]]]

正则表达式

if (value MATCHES regex)

demo

如果是Fred或者Barney执行if中的语句,否则执行else语句.

message("-------------------------------")
set(who "Fred")
if("Hi from ${who}" MATCHES "Hi from (Fred|Barney).*")
    message(STATUS "says Hello")
else()
    message(STATUS " 执行到这里")
endif()

 

文件系统相关

if (EXISTS pathFileOrDir)         #是否存在文件
if (IS_DIRCTORY pathToDir)        #是不是目录
if (IS_SYMLINK fileName)          #是不是符号链接
if (IS_ABSOLUTE path)             #是不是绝对路径              
if (file1 IS_NEWR_THAN file2)     #第一个文件是不是比第二个文件新

判断是否存在的表达式 

if (DEFINED name)                #有没有定义name这个变量
if (COMMAND name)                #有没有name这个命令
if (POLICY name)                 #有没有name这个策略
if (TARGET name)                 #有没有name这个目标
if (TEST name)                   #有没有name这个单元测试
if (value IN_LIST listVar)       #value这个值是不是在listVar这个列表里面
if (DEFINED SOMEVAR)             #检查是不是定义了SOMEVAR这个变量
if (DEFINED CACHE{SOMEVAR})      #检查是不是CACHE(缓存)SOMEVAR这个变量
if (DEFINED ENV{SOMEVAR})        #检查是不是定义了ENV(环境)SOMEVAR这个变量

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

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

相关文章

黑苹果网络经常掉线/无线网卡无法驱动解决办法(itlwm)

适用问题 黑苹果3-5分钟掉一次网&#xff0c;网卡无法驱动(右上角WLAN图标变灰有斜杠) 作者环境 作者笔记本因为Intel网卡太旧且系统支持不稳定&#xff0c;所以经常掉网 在Github上有一款驱动(Airport)itlwm&#xff0c;经OC注入后网络状态稳定 安装方法(OC) 下载 建议在…

阿里云服务器扩容记录

先在控制台选择云盘扩容&#xff0c;然后才能在服务器操作&#xff1a; blkidlsblk -n df -Thapt-get updatetype growpart || apt-get install -y cloud-guest-utilstype sgdisk || apt-get install -y gdiskLC_ALLen_US.UTF-8 growpart /dev/vda 3 resize2fs /dev/vda3

Element+Vue+OpenLayers的项目实战

WebGIS ElementVueOpenLayers的项目实战 使用npm配置开发环境Vue的安装npm安装vue-cli脚手架构建工具安装桥接工具运行项目 使用npm配置开发环境 开发是项目级别的&#xff0c;则需要使用npm来配置开发环境&#xff1b; 使用npm配置开发环境主要包括Vue、Element和OpenLayers的…

PyQt如何查找帮助信息(不会写组件的代码,快看过来!)

1.可以在PyQt6官网中查找信息kReference Guide — PyQt Documentation v6.5.1 看不懂没有关系啦&#xff0c;可以使用网页翻译哒~ 找到或者直接搜索QLabel&#xff0c;寻找对应函数即可 2. https://zetcode.com/pyqt6/ 3.Qt Creator中寻找 例如&#xff0c;输入setText 就可以…

BC 汇率读取问题

今天发现一个奇怪的问题&#xff0c;读去汇率&#xff0c;A账户汇率正常读取&#xff0c;B账户能读取到记录&#xff0c;并且ABAP判断不是初始&#xff0c;但是里面的实际数据都是0 。发现是权限的问题 sm30 经过测试 是以上的权限对象的问题 解决思路 权限对象配起来

如何通过浏览器配置哪些网页不走代理服务器,Lantern开启后部分网页打不开了

浏览器点设置 > 搜索“代理” > “打开计算机的代理设置” > 编辑“使用代理服务器” 搜索“代理” > “打开计算机的代理设置” > 编辑“使用代理服务器”&#xff0c;将不用代理的url链接域名写进来&#xff0c;点击保存。然后刷新打不开的网页&#xff0c;…

Elasticsearch + Kibana+Docker实现词云

需求 实现文件导入es&#xff0c;支持格式TXT、DOC、PPT、XLS、PDF、图片ik分词器远程热更新自定义扩展字典和停用字典Kibana配置词云&#xff0c;并显示对应文档详情和字典频次&#xff0c;且自定义显示字典 技术点 文件导入&#xff1a;es插件ingest-attachment图片文字识…

QT day1简单登录界面

widget.cpp文件代码&#xff1a; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {qDebug()<<this->size();qDebug()<<this->frameSize();this->setFixedSize(50…

Element Plus el-table 自定义合并行和列

原文链接&#xff1a;Element Plus el-table 自定义合并行和列 前言 目标效果是将表格行数据中某个属性值相同的项合并到一起&#xff0c;效果如下&#xff1a; <el-table :data"tableData" :span-method"spanMethod" style"width: 100%">…

[桌面运维] 显示器 色准,色域,色深,分辨率,带宽,刷新率的基本概念,图像呈现的基本原理

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;(*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &am…

数字创新 融合发展 2023中国国际数字和软件大会在大连开幕

作为数字和软件服务产业一年一度的行业盛宴&#xff0c;为期四天的2023年中国国际数字和软件服务交易会&#xff08;以下简称“数交会”&#xff09;&#xff0c;于7月6日在大连正式拉开帷幕。 本届数交会由商务部、科技部、中国国际贸易促进委员会、辽宁省人民政府主办&#x…

抖音seo矩阵系统源代码分享--开发者

一、技术开发注意事项&#xff1a; 目录 一、技术开发注意事项&#xff1a; 二、抖音SEO账号矩阵系统源码思路 三、抖音SEO底层开发逻辑主要包括以下几个方面&#xff1a; 四、 功能规划 五、 代码开发展示 确定业务需求&#xff1a;在开发前&#xff0c;需要明确抖音矩阵…

游泳耳机哪款好,列举几款不错的游泳耳机

在接下来的日子可以说每个地方的天气都陆续的进入了夏天&#xff0c;而在炎热的夏天里&#xff0c;很多人都会选择通过游泳&#xff0c;在水下感受凉爽的同时起到了不错的放松效果&#xff0c;但对于新手而言有一些游泳好物还不知道该如何挑选&#xff0c;今天我就来给大家分享…

写一个starter(spring boot)

前置知识 自动装配 自动装配的一个重要注解就是SpringBootApplication。它是一个复合注解&#xff0c;由四个元注解和另外三个注解组成。这三个注解是&#xff1a; ConfigurationEnableAutoConfigurationComponentScan Configuration Configuration 是 JavaConfig 形式的…

红黑树做中文字符输入法,你懂了不?

前言 输入一个字符&#xff0c;匹配中文字符的输入法&#xff0c; 例如输入a&#xff0c;输出&#xff1a;啊阿&#xff0c;然后再输入n&#xff0c;即变成an&#xff0c;输出&#xff1a;鞍氨安俺按暗岸胺案&#xff0c; 要求要有搜索的接口&#xff0c;应该如何设计呢&#…

【JY】这个房子应该做抗震or减隔震?

一个问题的引出 有一个有趣的问题&#xff0c;你家如果在处于地震带高烈度地区的村子里有一块地可盖房子&#xff0c;你会用什么技术建造呢&#xff1f;&#xff08;村镇建筑建造~&#xff09; 抗震 or 减隔震&#xff1f; 正文 对于这个问题&#xff0c;呼声最高的是隔震技术…

【数据结构】24王道考研笔记——树与二叉树

五、树与二叉树 目录 五、树与二叉树树的基本概念二叉树的概念基础概念常考性质存储方式 二叉树遍历及线索二叉树前中后以及层次遍历线索二叉树 树、森林树的存储结构树、森林与二叉树的转换树、森林的遍历 树与二叉树应用哈夫曼树并查集 树的基本概念 树是n个结点的有限集合&…

Oracle体系结构

Oracle体系结构 前言 1、数据库 2、 实例 3、用户 4、表空间 5、数据文件&#xff08;dbf、ora&#xff09; 6、逻辑图 1、数据库 Oracle 数据库是数据的物理存储。这就包括&#xff08;数据文件 ORA 或者 DBF、控制文件、联机日志、参数文件&#xff09;。 其实 Oracle 数据库…

【javaEE面试题(一)用鸡和鸡蛋和房间的样例 讲给面试官听】【3.8千字解析进程和线程-配非常重要的面试题】进程和线程的区别

欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#xff1a;重难点★✔ 蓝色文字表示&#…

Nodejs基于Windows安装教程

一、安装环境 在进行 Node.js 环境的安装之前&#xff0c;您需要先安装并配置好以下环境&#xff1a; 操作系统&#xff1a;Windows 命令行工具&#xff1a;Node.js 是通过命令行工具进行使用和管理的&#xff0c;因此您需要选择一个适合您的命令行工具。在 Windows 上&…