foreach
Оценить группу команд для каждого значения в списке.
foreach(<loop_var> <items>) <commands> endforeach()
где <items> представляет собой список элементов, разделенных точкой с запятой или пробелом. Все команды между foreach и соответствующей endforeach записываются без вызова. После оценки endforeach, записанный список команд вызывается один раз для каждого элемента в <items>. В начале каждой итерации переменная loop_var будет установлена в значение текущего элемента.
Команды break() и continue() обеспечивают способ выхода из обычного потока управления.
По умолчанию, команда endforeach() допускает необязательный <loop_var> аргумент. Если он используется, он должен быть точной копией аргумента открывающей foreach команды.
foreach(<loop_var> RANGE <stop>)
В этом варианте foreach перебирает числа 0, 1, … до (включительно) неотрицательного целого числа <stop>.
foreach(<loop_var> RANGE <start> <stop> [<step>])
В этом варианте foreach перебирает числа от <start> до не более чем <stop> с шагом <step>. Если <step> не указано, то шаг равен 1. Все три аргумента <start> <stop> <step> должны быть неотрицательными целыми числами, а <stop> не должно быть меньше <start>; в противном случае вы входите в область недокументированного поведения, которое может измениться в будущих версиях.
foreach(loop_var IN [LISTS [<lists>]] [ITEMS [<items>]])
В этом варианте <lists> представляет собой список переменных со значениями списков, разделённых пробелами или точкой с запятой. Команда foreach перебирает каждый элемент в каждом заданном списке. Команды, следующие за ключевым словом 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
© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.16/command/foreach.html