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