Spec-Zone.ru › CMake 3.30

foreach

Оценить группу команд для каждого значения в списке.

foreach(<loop_var> <items>)
  <commands>
endforeach()

где <items> — список элементов, разделенных точкой с запятой или пробелами. Все команды между foreach и соответствующим endforeach записываются, но не вызываются. После оценки endforeach, записанный список команд вызывается один раз для каждого элемента в <items>. В начале каждой итерации переменная <loop_var> будет установлена в значение текущего элемента.

Область действия <loop_var> ограничена областью цикла. Подробнее см. политику CMP0124.

Команды 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
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=

См. также

  • break()
  • continue()
  • endforeach()
  • while()

© 2000–2023 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.26/command/foreach.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API