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