cmake foreach 条件判断

格式

cmake 复制代码
foreach(<loop_var> <items>)
  <commands>
endforeach()

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

数字迭代循环

cmake 复制代码
foreach(<loop_var> RANGE <stop>)
foreach(<loop_var> RANGE <start> <stop> [<step>])

LISTS查找

cmake 复制代码
foreach(<loop_var> IN [LISTS [<lists>]] [ITEMS [<items>]])

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

cmake 复制代码
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()

结果:

cmake 复制代码
-- X=0
-- X=1
-- X=2
-- X=3
-- X=4 5
-- X=6
-- X=7
-- X=8

多组LISTS同时查找

cmake 复制代码
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()

结果:

cmake 复制代码
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按顺序查找。

相关推荐
程序员与背包客_CoderZ1 小时前
高性能分布式KV存储引擎RocksDB入门与C/C++编码实战
c语言·开发语言·数据库·c++·分布式·分布式数据库·rocksdb
william_yangshun1 小时前
【大模型部署实战】kimi-k3-in-c 中文版:用 176KB 纯 C99 引擎在 CPU 上跑 Kimi K3 上手指南
c语言·开发语言
深圳市宝华视联2 小时前
Python 读取 IP 视频流简单 Demo
python·嵌入式硬件·opencv·网络协议·tcp/ip·实时音视频·嵌入式实时数据库
恒锐丰科技韩生2 小时前
RB6005A|晶准 单节锂电池内置 MOS 保护芯片 DFN2×3‑8
嵌入式硬件·硬件工程
youshi66682 小时前
stm32-PWR、低功耗模式
stm32·单片机·嵌入式硬件
ACP广源盛139246256733 小时前
Qwen3.8‑2.4T 开源落地@ACP#国产 Serdes 长距离视频传输芯片 GSV5800 在私有化 AI 服务中的价值与应用场景
大数据·数据库·人工智能·嵌入式硬件·矩阵·开源·音视频
Funing73 小时前
STM32 电机动态 PI 控制:从编码器反馈、增量式 PI 到 Matlab 参数拟合与 PWM 输出
stm32·嵌入式硬件·matlab·pi控制算法
Yyyyyy~3 小时前
【C语言】数据类型和变量【下】
c语言
云泽8084 小时前
深入浅出 STM32(十八):时钟树、总线与寄存器的底层联动机制
stm32·单片机·嵌入式硬件
米饭不加菜4 小时前
C51 语言参考手册
经验分享·笔记·单片机·嵌入式硬件