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: valuevar2:。在 NEW 行為下,此程式碼僅列印 var1: value

此政策是在 CMake 3.21 版本中引入的。它可以使用 cmake_policy()cmake_minimum_required() 進行設定。如果未設定,CMake 將發出警告,並使用 OLD 行為。

注意

政策的 OLD 行為根據定義為已棄用,並可能會在未來版本的 CMake 中移除。