foreach¶
为列表中的每个值评估一组命令。
foreach(<loop_var> <items>)
<commands>
endforeach()
其中 <items> 是由分号或空格分隔的项目列表。 foreach 和匹配的``endforeach`` 之间的所有命令都被记录下来而不被调用。一旦评估了 endforeach,就会为``<items>``中的每个项目调用一次记录的命令列表。在每次迭代开始时,变量 <loop_var> 将被设置为当前项的值。
<loop_var> 的范围仅限于循环范围。有关详细信息,请参阅政策:policy:CMP0124。
命令 break() 和 continue() 提供了逃离正常控制流的方法。
按照传统, endforeach() 命令接受一个可选的 <loop_var> 参数。如果使用,它必须逐字重复开头的“foreach”命令的参数。
foreach(<loop_var> RANGE <stop>)
在此变体中,foreach 遍历数字 0、1,...直到(并包括)非负整数 <stop>。
foreach(<loop_var> RANGE <start> <stop> [<step>])
在此变体中,foreach 以``<step>`` 的步骤迭代从``<start>`` 到最多``<stop>`` 的数字。如果未指定 <step>,则步长为 1。三个参数 <start> <stop> <step> 必须都是非负整数,并且``<stop>`` 不能小于 <start>;否则,您将进入可能在未来版本中更改的未记录行为的危险区域。
foreach(<loop_var> IN [LISTS [<lists>]] [ITEMS [<items>]])
在此变体中,<lists> 是一个空格或分号分隔的列表值变量列表。 foreach 命令迭代每个给定列表中的每个项目。 ITEMS 关键字后面的``<items>`` 与``foreach`` 命令的第一个变体一样处理。 LISTS A 和``ITEMS ${A}`` 的形式是等价的。
以下示例显示了如何处理 LISTS 选项:
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
foreach(<loop_var>... IN ZIP_LISTS <lists>)
在 3.17 版本加入.
在此变体中,<lists> 是一个空格或分号分隔的列表值变量列表。 foreach 命令同时遍历每个列表,设置迭代变量如下:
如果只给出了
loop_var,那么它将一系列loop_var_N变量设置为相应列表中的当前项;如果传递了多个变量名,它们的计数应该与列表变量计数相匹配;
如果任何列表较短,则不会为当前迭代定义相应的迭代变量。
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()
产量
-- num_0=one, num_1=satu
-- num_0=two, num_1=dua
-- num_0=three, num_1=tiga
-- num_0=four, num_1=
-- en=one, ba=satu
-- en=two, ba=dua
-- en=three, ba=tiga
-- en=four, ba=
也可以看看¶
中断()继续()而()