cmake foreach 条件判断

embedded/2025/1/19 2:28:27/

格式

foreach(<loop_var> <items>)<commands>
endforeach()

其中<items>是由空格或空白分隔的项目列表。foreach和匹配的endforeach之间的所有命令都被记录下来而不被调用。一旦计算完endforeach,将为<items>中的每个项目调用一次记录的命令列表。在每次迭代开始时,变量<loop_var>将被设置为当前项的值。<loop_var>的作用域被限制为循环作用域,不需要像C语言一样单独定义,endforeach结束变量<loop_var>的作用域。

数字迭代循环

foreach(<loop_var> RANGE <stop>)
foreach(<loop_var> RANGE <start> <stop> [<step>])

LISTS查找

foreach(<loop_var> IN [LISTS [<lists>]] [ITEMS [<items>]])

一般的编程语言只可以查找一个list,cmake 可以查找成多个list合并查找,如:

set(A 0;1)
set(B 2 3)
set(C "4 5")
set(D 6;7 8)
set(E "")
foreach(X IN LISTS A B C D E)message(STATUS "X=${X}")
endforeach()

结果:

-- X=0
-- X=1
-- X=2
-- X=3
-- X=4 5
-- X=6
-- X=7
-- X=8

多组LISTS同时查找

list(APPEND English one two three four)
list(APPEND Bahasa satu dua tiga)foreach(num IN ZIP_LISTS English Bahasa)message(STATUS "num_0=${num_0}, num_1=${num_1}")
endforeach()foreach(en ba IN ZIP_LISTS English Bahasa)message(STATUS "en=${en}, ba=${ba}")
endforeach()

结果:

list(APPEND English one two three four)
list(APPEND Bahasa satu dua tiga)foreach(num IN ZIP_LISTS English Bahasa)message(STATUS "num_0=${num_0}, num_1=${num_1}")
endforeach()foreach(en ba IN ZIP_LISTS English Bahasa)message(STATUS "en=${en}, ba=${ba}")
endforeach()

可以看到与上面的LISTS查找方式不一样的时ZIP时多个LIST同时查找,而LISTS时3按顺序查找。


http://www.ppmy.cn/embedded/155108.html

相关文章

第三章、python中的对象、变量、标识符、作用域、引用(调用)及地址的概念(3.1-3.2)------内存地址、创建对象、对象的类型及对象的划分问题

第三章、python中的对象、变量、标识符、作用域、引用(调用)及地址的概念 本章讲述编程中对象、变量、地址的基本概念及其之间的关系,可迭代对象、可变对象、不可变对象的特点。

【ComfyUI专栏】Git Clone 下载自定义节点的代理设置

我们实际在使用ComfyUI 下载节点的时候会碰到下载缓慢的问题,这个问题如何解决呢?有没有比较好的办法解决下载和复制缓慢的问题呢?这个就涉及到我们使用代理的方式进行节点下载的方式了。首先确定我们当前的代理服务器的设置,也就是IP地址和端口问题。 开启Cmd命令,执行如…

IDEA编译器集成Maven环境以及项目的创建(2)

选择&#xff1a;“File” ---> "Othoer Setting" --> "Settings for New Projects..." --->搜索“Maven” 新建项目 利用maven命令去编译这个项目 利用maven去打包

基于 STM32 连接 Mini MP3 播放器的实践探索

在嵌入式系统开发中&#xff0c;音频播放功能常常是提升项目趣味性和实用性的关键要素之一。本文将详细阐述从选用 51 单片机到最终基于 STM32 成功连接 Mini MP3 播放器并实现串口通信及音频播放的全过程&#xff0c;旨在为面临类似技术难题的开发者提供参考与借鉴。 一、51 …

Ansible深度解析:如何精准区分并选用command与shell模块

Ansible&#xff0c;作为一个强大的自动化工具&#xff0c;提供了多种模块来执行不同的任务。其中&#xff0c;command和shell模块是最常用的两个模块&#xff0c;用于在远程主机上执行命令。然而&#xff0c;尽管它们的功能相似&#xff0c;但在使用场景和特点上存在显著的差异…

Big-endian(大端字节序)与Little-endian(小端字节序)区别

文章目录 前言字节序的定义举例说明为什么有两种字节序应用举例总结 前言 BIG_ENDIAN 和 LITTLE_ENDIAN 是两种不同的字节序&#xff08;Byte Order&#xff09;表示方式&#xff0c;用于指定数据在内存中存储的顺序。 字节序的定义 字节序指的是多字节数据类型&#xff08;如…

[Qt] Box Model | 控件样式 | 实现log_in界面

目录 1、样式属性 &#xff08;1&#xff09;盒模型&#xff08;Box Model&#xff09; 2、控件样式示例 &#xff08;1&#xff09;按钮 &#xff08;2&#xff09;复选框 &#xff08;3&#xff09;单选框 &#xff08;4&#xff09;输入框 &#xff08;5&#xff09…

ffmpeg视频总帧数获取,取某一帧的图像方法

FFmpeg的Static版本的bin文件夹中只有三个.exe文件&#xff0c;分别是&#xff1a;ffmpeg.exe&#xff0c;ffplay.exe和ffprobe.exe&#xff0c;各功能如下&#xff1a; ffmpeg.exe&#xff1a;音视频转码、转换器 ffplay.exe&#xff1a;简单的音视频播放器 ffprobe.exe&am…