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按顺序查找。

相关推荐
欢乐熊嵌入式编程2 小时前
欢乐熊大话蓝牙知识14:用 STM32 或 EFR32 实现 BLE 通信模块:从0到蓝牙,你也能搞!
stm32·单片机·嵌入式硬件
傍晚冰川2 小时前
FreeRTOS任务调度过程vTaskStartScheduler()&任务设计和划分
开发语言·笔记·stm32·单片机·嵌入式硬件·学习
XRZaaa5 小时前
常见排序算法详解与C语言实现
c语言·算法·排序算法
SY师弟5 小时前
51单片机基础部分——矩阵按键检测
嵌入式硬件·矩阵·51单片机
jie188945758665 小时前
C++ 中的 const 知识点详解,c++和c语言区别
java·c语言·c++
Lester_11016 小时前
嵌入式学习笔记 - freeRTOS xTaskResumeAll( )函数解析
笔记·stm32·单片机·学习·freertos
阿超爱嵌入式6 小时前
STM32学习之I2C(理论篇)
stm32·嵌入式硬件·学习
彩妙不是菜喵7 小时前
算术操作符与类型转换:从基础到精通
c语言
JKHaaa8 小时前
几种简单的排序算法(C语言)
c语言·算法·排序算法
三月雪落无痕9 小时前
altium designer2024绘制stm32过程笔记x`
笔记·嵌入式硬件