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(), чтобы установить его в значение OLD или NEW явно. В отличие от многих параметров, CMake версии 3.27.9 не предупреждает, если параметр не установлен, и просто использует 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.27/policy/CMP0124.html