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 политики deprecated by definition и может быть удалено в будущей версии CMake.
© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.31/policy/CMP0124.html