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