当前位置: 首页 > news >正文

Cmake语法学习3:语法

1.双引号

1.1 命令参数

1)介绍

        命令中多个参数之间使用空格进行分隔,而 cmake 会将双引号引起来的内容作为一个整体,当它当成一个参数,假如你的参数中有空格(空格是参数的一部分),那么就可以使用双引号。

2)例子
message(Hello World)
message("Hello World")

        第一个 message 命令传入了两个参数,而第二个 message 命令只传入一个参数;

        在第一个 message 命令中,打印信息时,会将两个独立的字符串 Hello 和 World 都打印出来,而且World 会紧跟在Hello 之后。而第二个 message 命令只有一个参数。

HelloWorld
Hello World

1.2引用变量

1)介绍

        加上“ ”可以让cmake把这个数组的所有元素当成一个整体,而不是分散的个体。

2)例子

 (1)       

        不加双引号

# CMakeLists.txt
set(MY_LIST Hello World China)
message(${MY_LIST})

        执行结果

HelloWorldChina

 (2)

        加双引号

# CMakeLists.txt
set(MY_LIST Hello World China)
message("${MY_LIST}")

        执行结果

Hello;World;China

 2.条件判断

2.1格式

if(expression)# then section.command1(args ...)command2(args ...)...
elseif(expression2)# elseif section.command1(args ...)command2(args ...)...
else(expression)# else section.command1(args ...)command2(args ...)...
endif(expression)

2.2 expression表达式

 

2.3表达式详解

 2.3.1 <constant>

        在 cmake 中,可以把 1ONYESTRUEY 或非零数字以及 0OFFNOFALSENIGNORE、NOTFOUND、空字符串或以后缀-NOTFOUND 结尾这些理解为常量,类似于布尔值,而且它们不区分大小 写;如果参数不是这些特定常量之一,则将其视为变量或字符串,并使用除<constant>之外的表达式。

2.3.2 <variable/string>

        在 if(<variable/string>)条件判断中,如果变量已经定义,并且它的值是一个非假常量,则条件为真;否则为假,注意宏参数不是变量。

        真:变量定义+非假常量

        假:未定义/假常量

2.3.3 NOT <expression>

        NOT 其实就类似于 C 语言中的取反,在 if(NOT <expression>)条件判断中,如果表达式 expression 为真,则条件判断为假;如果表达式 expression 为假,则条件判断为真。

2.3.4 <expr1> AND <expr2>

        类似于 C 语言中的逻辑与(&&),只有 expr1 expr2 同时为真时,条件判断才为真;否则条件判断为假。

2.3.5 <expr1> OR <expr2>

        类似于 C 语言中的逻辑或(||),当 expr1 expr2 至少有一个为真时,条件判断为真;否则为假。

2.3.6 COMMAND command-name

1)介绍        

        如果 command-name 是一个已经定义的命令、宏或函数时,条件判断为真;否则为假。

 2)例子

if(COMMAND yyds)message(true)
else()message(false)
endif()

输出:false

if(COMMAND project)message(true)
else()message(false)
endif()

输出:true

2.3.7  TARGET target-name

1)介绍        
        如果 target-name 是 add_executable() add_library() add_custom_target() 定义的目标(这些目标在整个工程中必须是唯一的,不可出现两个名字相同的目标),则条件判断为真;否则为假。
2)例子
if(TARGET hello)message(true)
else()message(false)
endif()

        输出为false

add_library(hello hello.c)
if(TARGET hello)message(true)
else()message(false)
endif()

        输出为true

2.3.8 EXISTS path

        如果 path 指定的文件或目录存在,则条件判断为真;否则为假。需要注意的是, path 必须是文件或目录的全路径,也就是绝对路径。
2.3.9 IS_DIRECTORY path
如果 path 指定的路径是一个目录,则条件判断为真;否则为假,同样, path 也必须是一个绝对路径。
IS_ABSOLUTE path
如果给定的路径 path 是一个绝对路径,则条件判断为真;否则为假。
<variable|string> MATCHES regex
这个表达式用的比较多,可以用来匹配字符串,可以使用正则表达式进行匹配。
如果给定的字符串或变量的值与给定的正则表达式匹配,则为真,否则为假。
set(MY_STR "Hello World")
if(MY_STR MATCHES "Hello World")message(true)
else()message(false)
endif()

        输出为true

set(MY_STR "Hello World")
if("Hello World" MATCHES "Hello World")message(true)
else()message(false)
endif()

        输出为true

2.3.9 <variable|string> IN_LIST <variable>

        如果左边给定的变量或字符串是右边列表中的某个元素相同,则条件判断为真;否则为假。

2.3.10 DEFINED <variable>

        如果给定的变量已经定义,则条件判断为真,否则为假;只要变量已经被设置(定义),if 条件判断就 是真,至于变量的值是真还是假并不重要。

2.3.11 <variable|string> LESS <variable|string>

        如果左边给定的字符串或变量的值是有效数字并且小于右侧的值,则为真。否则为假。

2.3.12 <variable|string> GREATER <variable|string>
        如果左边给定的字符串或变量的值是有效数字并且大于右侧的值,则为真。否则为假。

2.3.13<variable|string> EQUAL <variable|string>

        如果左边给定的字符串或变量的值是有效数字并且等于右侧的值,则为真。否则为假。

3.循环语句

3.1foreach

1)基本语法

foreach(loop_var arg1 arg2 ...)command1(args ...)command2(args ...)...
endforeach(loop_var)
        endforeach 括号中的 <loop_var> 可写可不写,如果写了,就必须和 foreach 中的 <loop_var> 一致。
# foreach 循环测试
set(my_list hello world china)
foreach(loop_var ${my_list})message("${loop_var}")
endforeach()

        打印输出信息如下

2)RANGE 关键字

foreach(loop_var RANGE stop)
foreach(loop_var RANGE start stop [step])
        对于第一种方式,循环会从 0 到指定的数字 stop ,包含 stop stop 不能为负数。
        对于第二种,循环从指定的数字 start 开始到 stop 结束,步长为 step ,不过 step 参数是一个可选参数,如果不指定,默认 step=1 ;三个参数都不能为负数,而且 stop 不能比 start 小。
3)IN关键字
foreach(loop_var IN [LISTS [list1 [...]]][ITEMS [item1 [...]]])
        循环列表中的每一个元素,或者直接指定元素。

3.2while

while(condition)command1(args ...)command1(args ...)...
endwhile(condition)
        endwhile 括号中的 condition 可写可不写,如果写了,就必须和 while 中的 condition 一致。
cmake while 循环的含义与 C 语言中 while 循环的含义相同,但条件 condition 为真时,执行循环体中的命令,而条件 condition 的语法形式与 if 条件判断中的语法形式相同。

3.3break/continue

        break()命令用于跳出循环,和在 C 语言中的作用是一样的。
        continue() 命令用于结束本次循环,执行下一次循环。

4.math

        用到之后再学习

相关文章:

Cmake语法学习3:语法

1.双引号 1.1 命令参数 1&#xff09;介绍 命令中多个参数之间使用空格进行分隔&#xff0c;而 cmake 会将双引号引起来的内容作为一个整体&#xff0c;当它当成一个参数&#xff0c;假如你的参数中有空格&#xff08;空格是参数的一部分&#xff09;&#xff0c;那么就可以使…...

JavaScript 基础 - 第1天

介绍 掌握 JavaScript 的引入方式&#xff0c;初步认识 JavaScript 的作用 引入方式 JavaScript 程序不能独立运行&#xff0c;它需要被嵌入 HTML 中&#xff0c;然后浏览器才能执行 JavaScript 代码。通过 script 标签将 JavaScript 代码引入到 HTML 中&#xff0c;有两种方式…...

人口增长问题 T1063

#include<bits/stdc.h> using namespace std; int main(){int n;double x;cin>>x>>n;for(int i1;i<n;i){xx*1.001;}printf("%.4lf",x);return 0; }...

2024年Java算法面试题

2024年Java实战面试题&#xff08;北京&#xff09;_java 5 年 面试-CSDN博客 一、波菲那契递归 System.out.println("banc " banc(10)) public static int banc(int n){if( n0 ){return 0;}else if( n1 ){return 1;}else{return banc(n-1) banc(n-2);} } 二、冒…...

C#——三角形面积公式

已知三角形的三个边&#xff0c;求面积&#xff0c;可以使用海伦公式。 因此&#xff0c;可以执行得到三角形面积公式的计算方法代码如下&#xff1a; /** / <summary>* / 三角形面积公式* / </summary>* / <param name"a">边长a</param>*…...

tcpdump在手机上的使用

首先手机得root才可以&#xff0c;主要分析手机与手机的通信协议 我使用的是一加9pro&#xff0c; root方法参考一加全能盒子、一加全能工具箱官方网站——大侠阿木 (daxiaamu.com)https://optool.daxiaamu.com/index.php tcpdump&#xff0c;要安装在/data/local/tmp下要arm6…...

unity 导出H5

Unity 输出html5_mob649e8157aaee的技术博客_51CTO博客 Unity打包WebGL报Unable to parse Build/*.framework.js.gz This can happen if build compression was......._unable to load file build/out.framework.js.gz! che-CSDN博客...

认识 SYN Flood 攻击

文章目录 1.什么是 SYN Flood 攻击&#xff1f;2.半连接与全连接队列3.如何防范 SYN Flood 攻击&#xff1f;增大半连接队列开启 SYN Cookie减少 SYNACK 重传次数 参考文献 1.什么是 SYN Flood 攻击&#xff1f; SYN Flood 是互联网上最原始、最经典的 DDoS&#xff08;Distri…...

Node需要了解的知识

Node能执行javascript的原因。 浏览器之所以能执行Javascript代码&#xff0c;因为内部含有v8引擎。Node.js基于v8引擎封装&#xff0c;因此可以执行javascript代码。Node.js环境没有DOM和BOM。DOM能访问HTML所有的节点对象&#xff0c;BOM是浏览器对象。但是node中提供了cons…...

网络服务综合实验项目

目录 实验要求 运行环境 基础配置 业务需求 实验步骤 一、基础配置 1.1、配置静态IP 1.1.1、 在192.168.159.130中配置 1.1.2、 在192.168.159.131中配置 ​编辑 1.2、修改主机名及hosts映射 1.2.1、在192.168.159.130中配置 1.2.2、 编辑配置hosts文件 1.2.3、重启…...

工厂模式与抽象工厂模式

如有错误或有补充&#xff0c;以及任何的改进意见&#xff0c;请在评论区留下您的高见 工厂模式 工厂模式是一种创建型设计模式。在工厂模式中&#xff0c;类的实例化过程通常是通过一个专门的工厂类来完成的&#xff0c;而不是直接在客户端代码中进行的。这样可以提供更好的…...

Springboot整合Websocket实现ws和wss连接

1. 引入pom依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId><version>2.7.10</version> </dependency>2. 新建websocket配置文件 import org.springf…...

CSC联合培养博士申请亲历|联系外导的详细过程

在CSC申报的各环节中&#xff0c;联系外导获得邀请函是关键步骤。这位联培博士同学的这篇文章&#xff0c;非常详细且真实地记录了申请过程、心理感受&#xff0c;并提出有益的建议&#xff0c;小编特推荐给大家参考。 2024年国家留学基金委公派留学项目即将开始&#xff0c;其…...

没有外网Nginx如何配置如何开启https

判断是否支持open-ssl 在服务器执行如下命令 openssl version没有则安装open-ssl&#xff0c;由于服务器没有外网&#xff0c;可以离线安装openssl-3.0.1.tar.gz&#xff0c;我是在有网的服务器直接下载的&#xff0c;然后再上传到这台无网的服务器上 wget https://www.open…...

【Docker篇】Linux安装Docker、docker安装mysql、redis、rabbitmq

1.Linux安装docker 官方帮助文档&#xff1a;Install Docker Engine on CentOS | Docker Docs 1.1安装命令 # 1. 卸载之前的dockersudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate…...

WPF应用程序(.Net Framework 4.8) 国际化

1、新建两个资源字典文件zh-CN.xaml和en-US.xaml&#xff0c;分别存储中文模板和英文模板 (1) zh-CN.xaml <ResourceDictionary xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml&q…...

Elasticsearch:Geoshape query

Geoshape 查询可以用于过滤使用 geo_shape 或 geo_point 类型索引的文档。 geo_shape 查询使用与 geo_shape 或 geo_point 映射相同的索引来查找具有与查询形状相关的形状的文档&#xff0c;并使用指定的空间关系&#xff1a;相交&#xff08;intersect&#xff09;、包含(con…...

安装配置sqoop

一、了解Sqoop 1、Sqoop产生的原因 A. 多数使用hadoop技术的处理大数据业务的企业,有大量的数据存储在关系型数据中。 B. 由于没有工具支持,对hadoop和关系型数据库之间数据传输是一个很困难的事。 以上是sqoop产生的主要原因,也因此Sqoop主要用于hadoop与关系型数据库之…...

数据结构——实验01-线性表的链式存储和操作

一、实验内容 二、算法思想与算法实现 1、解题思想 &#xff08;1&#xff09;逆序创建链表La就是使用头插法创建一个链表&#xff0c;所谓头插法就是在创建链表时始终将新元素插入到头结点之后&#xff0c;而正序创建链表Lb就是使用尾插法创建一个链表&#xff0c;所谓尾插法…...

十分钟上手vue!

Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;Vue 都可以胜任。 一 vue.js的导入及使用 vue安装…...

基于VISSIM的交叉口借道左转信号配时方案研究

文章目录 一、摘要二、研究目标三、交叉口借道左转设置条件分析四、实例分析源码获取 一、摘要 交叉口中的左转车辆是引起车辆冲突和交叉口延误的主要因素&#xff0c;本文通过对相关交叉口进行实地调查&#xff0c;收集相关数据&#xff0c;再通过分析借道左转的原理&#xf…...

Tun模式浏览器无法使用网络

环境Win11&#xff0c;v2软件表现情况打开Tun模式后发现无法连接网络&#xff0c;v2的dns配置保持默认。本文方法适用于打开Tun模式时&#xff0c;虚拟网卡可以正常创建&#xff0c;但是仍然无法联网的情况。在开始里搜索查看网络连接&#xff0c;这里是可以正常创建的。解决方…...

计算机毕业设计:Python全国气象数据采集与可视化平台 Flask框架 可视化 数据分析 机器学习 天气 深度学习 AI 空气质量分析(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ > &#x1f345;想要获取完整文章或者源码&#xff0c;或者代做&#xff0c;拉到文章底部即可与…...

5电平三相MMC的VSG控制及其MATLAB-Simulink仿真模型:调频调压效果验证

模块化多电平变流器/MMC/的VSG控制/虚拟同步发电机控制/MATLAB–Simulink仿真模型 5电平三相MMC&#xff0c;采用VSG控制。 受端接可编辑三相交流源&#xff0c;直流侧接无穷大电源提供调频能量。 设置频率波动和电压波动的扰动&#xff0c;可以验证VSG控制的调频调压效果最近在…...

JointJS高亮器与工具系统:增强用户交互体验的终极指南

JointJS高亮器与工具系统&#xff1a;增强用户交互体验的终极指南 【免费下载链接】joint A proven SVG-based JavaScript diagramming library powering exceptional UIs 项目地址: https://gitcode.com/gh_mirrors/jo/joint JointJS作为一款强大的SVG图表库&#xff0…...

算法奇妙屋(三十五)-贪心算法学习之路 2

文章目录一. 力扣 [376. 摆动序列](https://leetcode.cn/problems/wiggle-subsequence/description/)1. 题目解析2. 算法原理3. 代码二. 力扣 [300. 最长递增子序列](https://leetcode.cn/problems/longest-increasing-subsequence/description/)1. 题目解析2. 算法原理3. 代码…...

英飞凌TC397芯片深度解析:从规格表到应用实战

1. TC397芯片的硬件架构解析 第一次拿到英飞凌TC397芯片的规格书时&#xff0c;我被密密麻麻的参数表格吓了一跳。作为一款面向汽车电子领域的高性能多核MCU&#xff0c;它的硬件架构设计确实有很多独到之处。经过几个实际项目的磨合&#xff0c;我发现理解这些参数背后的设计逻…...

Zotero PDF Translate:让学术研究跨越语言边界的智能翻译解决方案

Zotero PDF Translate&#xff1a;让学术研究跨越语言边界的智能翻译解决方案 【免费下载链接】zotero-pdf-translate Translate PDF, EPub, webpage, metadata, annotations, notes to the target language. Support 20 translate services. 项目地址: https://gitcode.com/…...

Java 25虚拟线程压测突崩实录:QPS从12万骤降至200,我们用1小时定位并修复的4层嵌套阻塞根源

第一章&#xff1a;Java 25虚拟线程压测突崩事件全景复盘某金融核心支付网关在升级至 JDK 25 并全面启用虚拟线程&#xff08;Virtual Threads&#xff09;后&#xff0c;于全链路压测中突发大规模 StackOverflowError 与 OutOfMemoryError: Metaspace 混合崩溃&#xff0c;TPS…...

[具身智能-283]:从某种意义上看,卷积核也是一种平面空间注意力机制,有两层含义:一个卷积核只关注某一特征,一次移动关注卷积核对应的局部区域。

这个观点实际上是从信息筛选和资源分配的角度&#xff0c;重新解构了卷积操作的物理意义。将卷积核视为一种“平面空间注意力机制”&#xff0c;不仅逻辑自洽&#xff0c;而且精准地揭示了CNN处理信息的两个核心维度&#xff1a;特征维度的专一性和空间维度的局部性。我们可以顺…...