[CMake教程] 循环
目录
- 一、foreach()
- 二、while()
- 三、break() 与 continue()
作为一个编程语言,CMake也少不了循环流程控制,他提供两种循环foreach()
和 while()
。
一、foreach()
基本语法:
foreach(<loop_var> <items>)<commands>
endforeach()
其中<items>
可以是由分号或空格分隔的项目列表,也可以是一个列表变量。每次迭代,<loop_var>
将被赋值为当前项目的值。
set(item1 a)
set(item2 b)
set(item3 c)
set(item4 d)
foreach(var ${item1} ${item2} ${item3} ${item4})message("var = ${var}")
endforeach()
----------------
var = a
var = b
var = c
var = d
var = eset(myList 1 2 3 4)
foreach(var ${myList})message("var = ${var}")
endforeach()
----------------
var = 1
var = 2
var = 3
var = 4
foreach()
还有一些进阶的用法:
-
foreach(<loop_var> RANGE <stop>)
使用
<stop>
指定迭代范围(<stop>
> 0),相当于有一个迭代变量i
,迭代范围为[0, <stop>]
。foreach(var RANGE 5)message("var = ${var}") endforeach() ---------------- var = 0 var = 1 var = 2 var = 3 var = 4 var = 5
-
foreach(<loop_var> RANGE <start> <stop> [<step>])
指定迭代范围的开始(
<start>
)和结束(<stop>
),并可选指定步长(<step>
)。foreach(var RANGE 2 10 2)message("var = ${var}") endforeach() ---------------- var = 2 var = 4 var = 6 var = 8 var = 10
-
foreach(<loop_var> IN [LISTS [<lists>]] [ITEMS [<items>]])
它和
foreach(<loop_var> <items>)
的用法基本一样,唯一不同的是,用LISTS
指定列表后不需要用${}
对列表进行取值。set(myList 1 2 3 4) foreach(var IN LISTS myList)message("var = ${var}") endforeach() ---------------- var = 1 var = 2 var = 3 var = 4
-
foreach(<loop_var>... IN ZIP_LISTS <lists>)
CMake 3.17引入
这个用法可以并行遍历多个列表,可以发现
<loop_var>
后面有...
,所以他可以传入多个变量以接受多个列表的遍历,传入多个变量时,变量的数量应该和列表的数量相同。但如果只传入一个变量,将会把对应列表的元素存入到
<loop_var>_N
中,如下:set(myList0 a b c d) set(myList1 1 2 3 4)# 传入多个变量 foreach(var0 var1 IN ZIP_LISTS myList0 myList1)message("var0 = ${var0}, var1 = ${var1}") endforeach() ---------------- var1 = a, var2 = 1 var1 = b, var2 = 2 var1 = c, var2 = 3 var1 = d, var2 = 4# 传入一个变量 set(myList0 a b c d) set(myList1 1 2 3 4) foreach(var IN ZIP_LISTS myList0 myList1)message("var_0 = ${var_0}, var_1 = ${var_1}") endforeach() ---------------- var_0 = a, var_1 = 1 var_0 = b, var_1 = 2 var_0 = c, var_1 = 3 var_0 = d, var_1 = 4
二、while()
基本语法:
while(<condition>)<commands>
endwhile()
如果 <condition>
为真,则执行循环,示例如下:(列表操作详见CMake列表 - list)
list(LENGTH myList listLen)
while(listLen GREATER 0)message("myList = ${myList}")list(POP_FRONT myList)list(LENGTH myList listLen)
endwhile()
----------------
myList = 1;2;3;4
myList = 2;3;4
myList = 3;4
myList = 4
三、break() 与 continue()
与绝大多数编程语言一样,CMake也可以通过 break()
跳出循环,通过 continue()
结束本次循环并继续下次循环。
set(myList 1 2 3 4 5 6 7)
foreach(var IN LISTS myList)math(EXPR expr ${var}%2)if(expr EQUAL 0)continue()endif()if(${var} GREATER 5)break()endif()message("var = ${var}")
endforeach()
----------------
var = 1
var = 3
var = 5
相关文章:
[CMake教程] 循环
目录 一、foreach()二、while()三、break() 与 continue() 作为一个编程语言,CMake也少不了循环流程控制,他提供两种循环foreach() 和 while()。 一、foreach() 基本语法: foreach(<loop_var> <items>)<commands> endfo…...
Mojo安装使用初体验
一个声称比python块68000倍的语言 蹭个热度,安装试试 系统配置要求: 不支持Windows系统 配置要求: 系统:Ubuntu 20.04/22.04 LTSCPU:x86-64 CPU (with SSE4.2 or newer)内存:8 GiB memoryPython 3.8 - 3.10g or cla…...
艺术与AI:科技与艺术的完美融合
文章目录 艺术创作的新工具生成艺术艺术与数据 AI与互动艺术虚拟现实(VR)与增强现实(AR)机器学习与互动性 艺术与AI的伦理问题结语 🎉欢迎来到AIGC人工智能专栏~艺术与AI:科技与艺术的完美融合 ☆* o(≧▽≦…...
Android常用的工具“小插件”——Widget机制
Widget俗称“小插件”,是Android系统中一个很常用的工具。比如我们可以在Launcher中添加一个音乐播放器的Widget。 在Launcher上可以添加插件,那么是不是说只有Launcher才具备这个功能呢? Android系统并没有具体规定谁才能充当“Widget容器…...
探索在云原生环境中构建的大数据驱动的智能应用程序的成功案例,并分析它们的关键要素。
文章目录 1. Netflix - 个性化推荐引擎2. Uber - 实时数据分析和决策支持3. Airbnb - 价格预测和优化5. Google - 自然语言处理和搜索优化 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专…...
jupyter 添加中文选项
文章目录 jupyter 添加中文选项1. 下载中文包2. 选择中文重新加载一下,页面就变成中文了 jupyter 添加中文选项 1. 下载中文包 pip install jupyterlab-language-pack-zh-CN2. 选择中文 重新加载一下,页面就变成中文了 这才是设置中文的正解ÿ…...
系列十、Java操作RocketMQ之批量消息
一、概述 RocketMQ可以一次性发送一组消息,那么这一组消息会被当做一个消息进行消费。 二、案例代码 2.1、pom 同系列五 2.2、RocketMQConstant 同系列五 2.3、BatchConsumer package org.star.batch.consumer;import cn.hutool.core.util.StrUtil; import lom…...
leetcode1两数之和
题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你…...
近年GDC服务器分享合集(四): 《火箭联盟》:为免费游玩而进行的扩展
如今,网络游戏采用免费游玩(Free to Play)加内购的比例要远大于买断制,这是因为前者能带来更低的用户门槛。甚至有游戏为了获取更多的用户,选择把原来的买断制改为免费游玩,一个典型的例子就是最近的网易的…...
android反射详解
1,反射的定义 一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的,并且能够获得此类的引用。于是我们直接对这个类进行实例化,之后使用这个类对象进行操作。 反射则是一开始并不知道我要初始化的类对象是…...
Python 反射和动态执行
反射主要应用于类的对象上,在运行时,将对象中的属性和方法反射出来,通过字符串对对象成员(属性、方法)进行查找、获取、删除、添加成员等动作,是一种基于字符串的事件驱动技术。 python是一门动态语言&…...
计算机网络常见端口号
端口号标识了一个主机上进行通信的不同的应用程序。比如网站服务器80端口一般都是开启的,等你来连接。 端口划分: (1)常用端口,公共端口(保留给公共服务所使用),端口号为0-1023之间…...
SpringBoot / Vue 对SSE的基本使用(简单上手)
一、SSE是什么? SSE技术是基于单工通信模式,只是单纯的客户端向服务端发送请求,服务端不会主动发送给客户端。服务端采取的策略是抓住这个请求不放,等数据更新的时候才返回给客户端,当客户端接收到消息后,…...
Qt串口基本设置与协议收发
前言 1.一直都想要做一个Qt上位机,趁着这个周末有时间,动手写一下 2.comboBox没有点击的信号,所以做了一个触发的功能 3.Qt的数据类型很奇怪,转来转去的我也搞得很迷糊 4.给自己挖个坑,下一期做一个查看波形的上位…...
interview3-微服务与MQ
一、SpringCloud篇 (1)服务注册 常见的注册中心:eureka、nacos、zookeeper eureka做服务注册中心: 服务注册:服务提供者需要把自己的信息注册到eureka,由eureka来保存这些信息,比如服务名称、…...
kafka详解一
kafka详解一 1、消息引擎背景 根据维基百科的定义,消息引擎系统是一组规范。企业利用这组规范在不同系统之间传递语义准确的消息,实现松耦合的异步式数据传递. 即:系统 A 发送消息给消息引擎系统,系统 B 从消息引擎系统中读取 A…...
Flutter yuv 转 rgb
1、引用yuv_converter库 yuv_converter: ^0.0.1 2、导入头文件: import package:yuv_converter/yuv_converter.dart;3、yuv转rgb YuvConverter.yuv420NV21ToRgba8888(yuvRawData, 512, 512) 根据yuv格式选择不同的api。 举个例子: void initState() …...
MySQL——子查询
2023.9.8 相关学习笔记: #子查询 /* 含义: 出现在其他语句中的select语句,称为子查询或内查询 外部的查询语句,称为主查询或外查询分类: 按子查询出现的位置:select后面:仅仅支持标量子查询fro…...
Java学习笔记---多态
面向对象三大特征之一(继承,封装,多态) 多态的应用场景:根据传递对象的不同,调用不同的show方法 一、多态的定义 同类型的对象,表现出的不同形态(对象的多种形态) 二…...
2023-09-10 LeetCode每日一题(课程表 II)
2023-09-10每日一题 一、题目编号 210. 课程表 II二、题目链接 点击跳转到题目位置 三、题目描述 现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] [ai, bi] ,表示在…...
合并区间【贪心算法】
合并区间 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 class Solution {public int[][] merge(int[…...
2023,软件测试人的未来在哪里?
2023年,IT行业出现空前的萧条,首先是年初一开始各大厂像着了魔似的不约而同的纷纷裁员、降薪、奖金包缩水,随之而来的是需求萎缩,HC减少或封锁等等。 而有幸未被列入裁员名单的在职人员,庆幸之余也心有余悸࿰…...
Python中的Numpy向量计算(R与Python系列第三篇)
目录 一、什么是Numpy? 二、如何导入NumPy? 三、生成NumPy数组 3.1利用序列生成 3.2使用特定函数生成NumPy数组 (1)使用np.arange() (2)使用np.linspace() 四、NumPy数组的其他常用函数 (1)np.z…...
LeetCode刷题笔记【27】:贪心算法专题-5(无重叠区间、划分字母区间、合并区间)
文章目录 前置知识435. 无重叠区间题目描述参考<452. 用最少数量的箭引爆气球>, 间接求解直接求"重叠区间数量" 763.划分字母区间题目描述贪心 - 建立"最后一个当前字母"数组优化marker创建的过程 56. 合并区间题目描述解题思路代码① 如果有重合就合…...
nvidia-smi 命令详解
nvidia-smi 命令详解 1. nvidia-smi 面板解析2. 显存与GPU的区别 Reference: nvidia-smi命令详解 相关文章: nvidia-smi nvcc -V 及 CUDA、cuDNN 安装 nvidia-smi(NVIDIA System Management Interface) 是一种命令行实用程序,用于监控和管理 NVIDIA G…...
fork()函数的返回值
在程序中,int pd fork() 是一个典型的 fork() 调用。fork() 函数会创建一个新的进程,然后在父进程中返回子进程的进程ID(PID),在子进程中返回0。所以 pd 的值会根据当前进程是父进程还是子进程而有所不同:…...
Stable Diffusion WebUI挂VPN不能跑图解决办法(Windows)
如何解决SD在打开VPN的状态不能运行的问题 在我们开VPN的时候会出现无法生成图片,也无法做其他任何事,这个时候是不是很着急呢? 别急,我这里会说明如何解决。 就像这样,运行半天生成不了图,有时还会出现…...
Android的本地数据
何为本地,即写完之后除非手动修改,否像嘎了一样在那固定死了 有些需求可能也会要求我们去写死数据,因为这需求是一成不变的,那么你通常会用什么方法写死呢? 1. 本地存储-SharedPreferences 此方法可以长时间保存于手…...
android NDK 开发包,网盘下载,不限速
记录下ndk 开发包的地址,分享给大家。 另外有Android studio的下载包, 在另一篇文章 链接:http://t.csdn.cn/JSr9x Android Studio.exe 下载 2023 最新更新,网盘下载_hsj-obj的博客-CSDN博客 主要是19-25,其他的没有…...
【每日一题Day320】LC2651计算列车到站时间 | 数学
计算列车到站时间【LC2651】](https://leetcode.cn/problems/calculate-delayed-arrival-time/) 给你一个正整数 arrivalTime 表示列车正点到站的时间(单位:小时),另给你一个正整数 delayedTime 表示列车延误的小时数。 返回列车实…...
国外的wordpress主题公园/seo网络推广是干嘛的
撰文:William M. Peaster编辑:南风以太坊是全球开放式应用的首要基础设施。不幸的是,由于以太坊的权衡,在高需求时期使用这个在不断发展的网络可能会非常昂贵和缓慢 -- 毕竟只有这么多的区块空间可供使用。尽管如此,以…...
怎么用代码做网站推荐/搜什么关键词你都懂的
为什么80%的码农都做不了架构师?>>> 查询端口被哪个进程占用 netstat -ano | findstr "8095"查看进程编号对应的程序名称 tasklist | findstr "720"通过程序名称结束进程 taskkill /f /t /im java.exe通过进程编号结束进程 tskill …...
没有网站可以做京东联盟吗/如何在百度搜索到自己的网站
第一章 行星地球第一节 宇宙中的地球>>>>一、地球在宇宙中的位置1. 天体是宇宙间物质存在的形式,如恒星、行星、卫星、星云、流星、彗星。2. 天体系统:天体之间相互吸引和相互绕转形成天体系统。3. 天体系统的层次由大到小是:>…...
宁津网站建设/灰色行业推广
主板都有什么类型呢?不同主板之间有什么区别吗?不同类型的主板都有什么用呢?装机的时候,主板的大小不仅和机箱有关,也和其他硬件以及自己的性能、功能需求有很大的关系,因此选择一个正确类型的主板至关重要…...
门户app网站建设多少钱/百度seo综合查询
Nginx 的进程管理主要有 Single 和 Master 两种模型: 1) Single 模型是以 单进程方式 工作;2) Master 模型是以 一个 master 进程 多个 worker 进程 的方式 工作;参考源码:src/os/unix/ngx_process/cyclevoid ngx_master_process…...
做网站专题模板/网络推广的含义
当联通大肆利用人们对iPhone的狂热攻城掠地的时候,移动在做什么呢?韬光养晦吗,肯定不会;中国移动正在一步一步走向对手机互联网和移动互联的全面掌控。而OPhone的发展之路,就是这个历程中一项非常重要的里程碑。工信部…...