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

        用到之后再学习

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

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

相关文章

国自然结题报告为什么不能下载?如何解决

一直以来&#xff0c;国自然的结题报告都不是只能在线查看&#xff0c;这给很多科研人员带来一些不方便&#xff0c;因为在线查看的话&#xff0c;受限于网络&#xff0c;必须有网的时候才能看&#xff0c;并且官方网站的响应比较慢&#xff0c;想快速翻页&#xff0c;基本不可…

【Java程序设计】【C00240】基于Springboot的班级综合测评管理系统(有论文)

基于Springboot的班级综合测评管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的班级综合测评管理系统 本系统分为学生功能模块、管理员功能模块以及教师功能模块。 管理员功能模块&#xff1a;管理员功能…

MySQL学习记录——일 MySQL 安装、配置

文章目录 1、卸载内置环境2、安装MySQL3、启动4、登录5、配置my.cnf 当前环境是1核2G云服务器&#xff0c;CentOS7.6。要在root用户下进行操作 1、卸载内置环境 云服务器中有可能会自带mysql还有mariadb这样的数据库服务&#xff0c;在安装我们mysql前&#xff0c;得先查找一下…

迪文串口屏数据的隐藏功能

一、概述 由于项目中在使用迪文屏显示数据的时候&#xff0c;需要在数据为0的时候不显示0&#xff0c;而迪文屏默认的数据变量在无值的时候显示为0&#xff0c;此时可以使用数据的隐藏功能指令 二、具体实现方法 1、可以使用描述指针地址来实现数据的隐藏&#xff0c;查看应用…

大模型重塑车载语音交互:赛道巨头如何引领新周期?

车载语音交互赛道正进入新一轮竞争周期。 高工智能汽车注意到&#xff0c;传统车载语音交互赛道当前基本已进入成熟期&#xff0c;主要为任务型助手&#xff0c;包括从单轮对话到多轮对话&#xff0c;单音区到多音区&#xff0c;从单一的导航、多媒体娱乐等座舱功能扩展智能驾…

Ubuntu 添加字体

Ubuntu 添加字体 Ubuntu如何添加新的字体&#xff1f;似乎远远没有Windows方便呀&#xff0c;查询了一些资料&#xff0c;与大家分享。 方法1 根据字体名称直接安装 oyroy-FMVU08001:~$ sudo apt-get install fonts-wqy-zenhei [sudo] roy 的密码&#xff1a; 正在读取软件…

2024美赛D题完整四小问代码+数据集+22页成品参考论文

D题&#xff08;文末获取完整版的&#xff09; 题目三&#xff1a;新控制方法是否会让各利益相关者满意或优于当年实际记录的 水位? 解题思路 问题 3 要求我们理解控制算法对两座控制大坝流出量的敏感性&#xff0c;并利用 2017 年 的数据来验证新控制措施是否能为各方利益相关…

第二代视频换脸工具facefusion

GitHub - facefusion/facefusion: Next generation face swapper and enhancer官方地址 1.环境安装 Windows - FaceFusion Windows Python winget install -e --id Python.Python.3.10 PIP python -m ensurepip --upgrade GIT winget install -e --id Git.Git

【奶奶看了都会】《幻兽帕鲁》云服务器部署教程

在帕鲁的世界&#xff0c;你可以选择与神奇的生物「帕鲁」一同享受悠闲的生活&#xff0c;也可以投身于与偷猎者进行生死搏斗的冒险。帕鲁可以进行战斗、繁殖、协助你做农活&#xff0c;也可以为你在工厂工作。你也可以将它们进行售卖&#xff0c;或肢解后食用。 《幻兽帕鲁》官…

halcon中的坐标系相关

一、定义 世界坐标系&#xff1a;真实世界中物体实际位置&#xff08;三维&#xff09; 相机坐标系&#xff1a;以镜头光心为原点&#xff0c;光轴为Z轴&#xff08;三维&#xff09; 图像物理坐标系&#xff1a;以成像图像中心维原点&#xff08;二维&#xff09; 像素坐标系…

题目:有1,2,3,4共四个数字,能组成多少个不相同而且无重复数字的三位数有多少个,都是多少?lua

这是作者的思路&#xff0c; 创建三个表&#xff0c; 第一个数是从四个数遍历&#xff0c; 第二个是数剔除第一个数进行遍历 第三个是剔除第一第二个数遍历 脚本如下 local a{1,2, 3, 4} local b{} local c{} local d{} local function copy(tbl) local ctbl{} for k,v in…

MySQL 安装配置 windows

一、下载 去官网MySQL :: MySQL Downloads 下载社区版 然后根据自己的系统选择 直接下载。 二、安装 点击安装程序 这边看样子缺少东西。 去这边下载 Latest supported Visual C Redistributable downloads | Microsoft Learn 然后再一次安装mysql 三、配置 安装完成后&a…

记录关于node接收上传文件formData踩的坑

1.vue2使用插件formidable实现接收文件&#xff0c;首先接口不可以使用任何中间件&#xff0c;否则form.parse()方法不执行。 const express require(express) const multipart require(connect-multiparty); const testController require(../controller/testController)/…

WordPress SMTP发信避坑指南

前言 Clip_2024-01-31_19-46-18803285 10.5 KB 目前不少主题已经内置了SMTP发信功能&#xff0c;这是因为WordPress自带的mail()函数发信时基本无法发送。 但是在之前&#xff08;约2021年末&#xff09;貌似可以通过WordPress自带的函数发信&#xff0c;并且收信方提示由xxx代…

Request Response 基础篇

Request & Response 在之前的博客中&#xff0c;初最初见到Request和Response对象&#xff0c;是在Servlet的Service方法的参数中&#xff0c;之前隐性地介绍过Request的作用是获取请求数据。通过获取的数据来进行进一步的逻辑处理&#xff0c;然后通过对Response来进行数…

C# Onnx yolov8 水表读数检测

目录 效果 模型信息 项目 代码 训练数据 下载 C# Onnx yolov8 水表读数检测 效果 模型信息 Model Properties ------------------------- date&#xff1a;2024-01-31T10:18:10.141465 author&#xff1a;Ultralytics task&#xff1a;detect license&#xff1a;AGPL-…

c语言---访问越界之后死循环的原因

目录 死循环的概念环境题目代码运行结果对代码发生情况进行解释对i的地址和arr[12]地址一样的解释注意总结 死循环的概念 简单来说&#xff0c;死循环就是指无法靠自身的控制终止循环&#xff0c;在编程中&#xff0c;则是靠自身控制无法终止的程序。即在某一时刻&#xff0c;…

uniapp基于Android平台的校园生活服务交流论坛系统(二手,失物招领 -跑腿) 小程序hbuiderx

作为一款APP的校园论坛系统&#xff0c;面向的是大多数学者&#xff0c;软件的界面设计简洁清晰&#xff0c;用户可轻松掌握使用技巧。在调查之后&#xff0c;获得用户以下需求&#xff1a; &#xff08;1&#xff09;用户注册登录后&#xff0c;可进入系统解锁更多功能&#x…

Windows网络常用的11个命令,ping、tracert、arp、ipconfig、netstat、telnet等

1&#xff0e;ping命令 ping是个使用频率极高的实用程序&#xff0c;主要用于确定网络的连通性。ping能够以毫秒为单位显示延迟。如果应答时间短&#xff0c;表示数据报不必通过太多的路由器或网络&#xff0c;连接速度比较快。ping还能显示TTL&#xff08;Time To Live&#…

AspNet web api 和mvc 过滤器差异

最近在维护老项目。定义个拦截器记录接口日志。但是发现不生效 最后发现因为继承的 ApiController不是Controller 只能用 System.Web.Http下的拦截器生效。所以现在总结归纳一下 Web Api: System.Web.Http.Filters.ActionFilterAttribute 继承该类 Mvc: System.Web.Mvc.Ac…