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