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 中移除。