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