Spec-Zone.ru › CMake

CMP0124

Добавлено в версии 3.21.

Переменные цикла foreach() доступны только в области видимости цикла.

В CMake 3.20 и более ранних версиях переменная цикла всегда оставалась заданной после завершения цикла: она принимала значение, которое имела до цикла, если оно было задано, или пустую строку. В CMake 3.21 и более поздних версиях предпочтительно восстанавливается состояние переменной цикла, существовавшее до начала цикла: она остаётся заданной или незаданной. Эта политика обеспечивает совместимость с проектами, в которых ожидается, что переменная цикла всегда останется заданной.

Поведение OLD для этой политики заключается в том, что по завершении цикла переменной цикла присваивается её исходное значение или пустое значение. Поведение NEW для этой политики заключается в восстановлении состояния переменной цикла, существовавшего до начала цикла: она остаётся заданной или незаданной.

Например:

set(items a b c)

set(var1 "value")
unset(var2)

foreach(var1 IN LISTS items)
endforeach()

foreach(var2 IN LISTS items)
endforeach()

if(DEFINED var1)
  message("var1: ${var1}")
endif()
if(DEFINED var2)
  message("var2: ${var2}")
endif()

При поведении OLD этот код выводит var1: value и var2:. При поведении NEW этот код выводит только var1: value.

Эта политика появилась в CMake версии 3.21. Её можно задать с помощью cmake_policy() или cmake_minimum_required(). Если политика не задана, CMake не выдаёт предупреждение и использует поведение OLD.

Примечание

Поведение OLD политики по определению считается устаревшим и может быть удалено в будущей версии CMake.

© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/policy/CMP0124.html

Spec-Zone.ru

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