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