foreach
Evaluate a group of commands for each value in a list.
foreach(<loop_var> <items>) <commands> endforeach()
where <items>
is a list of items that are separated by semicolon or whitespace. All commands between foreach
and the matching endforeach
are recorded without being invoked. Once the endforeach
is evaluated, the recorded list of commands is invoked once for each item in <items>
. At the beginning of each iteration the variable loop_var
will be set to the value of the current item.
The commands break()
and continue()
provide means to escape from the normal control flow.
Per legacy, the endforeach()
command admits an optional <loop_var>
argument. If used, it must be a verbatim repeat of the argument of the opening foreach
command.
foreach(<loop_var> RANGE <stop>)
In this variant, foreach
iterates over the numbers 0, 1, … up to (and including) the nonnegative integer <stop>
.
foreach(<loop_var> RANGE <start> <stop> [<step>])
In this variant, foreach
iterates over the numbers from <start>
up to at most <stop>
in steps of <step>
. If <step>
is not specified, then the step size is 1. The three arguments <start>
<stop>
<step>
must all be nonnegative integers, and <stop>
must not be smaller than <start>
; otherwise you enter the danger zone of undocumented behavior that may change in future releases.
foreach(loop_var IN [LISTS [<lists>]] [ITEMS [<items>]])
In this variant, <lists>
is a whitespace or semicolon separated list of list-valued variables. The foreach
command iterates over each item in each given list. The <items>
following the ITEMS
keyword are processed as in the first variant of the foreach
command. The forms LISTS A
and ITEMS ${A}
are equivalent.
The following example shows how the LISTS
option is processed:
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()
yields
-- X=0 -- X=1 -- X=2 -- X=3 -- X=4 5 -- X=6 -- X=7 -- X=8
© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.15/command/foreach.html