CMP0054

警告

此策略的 OLD 行為已在 CMake 4.0 版本中移除。此策略必須透過呼叫 cmake_minimum_required()cmake_policy() 設定為 NEW

在 3.1 版本中新增。

僅在未加上引號時,將 if() 參數解譯為變數或關鍵字。

CMake 3.1 及以上版本,當 if() 命令參數為帶引號的參數方括號參數 時,不再隱含地取消引用變數或解譯關鍵字。

此策略的 OLD 行為是取消引用變數並解譯關鍵字,即使它們被引號或括號括起來。NEW 行為是不取消引用變數或解譯已加上引號或括號的關鍵字。

給定以下部分範例

set(A E)
set(E "")

if("${A}" STREQUAL "")
  message("Result is TRUE before CMake 3.1 or when CMP0054 is OLD")
else()
  message("Result is FALSE in CMake 3.1 and above if CMP0054 is NEW")
endif()

在顯式展開變數後,這會得到

if("E" STREQUAL "")

在策略設定為 OLD 的情況下,隱含展開在語義上將其簡化為

if("" STREQUAL "")

在策略設定為 NEW 的情況下,帶引號的參數將不會被進一步取消引用

if("E" STREQUAL "")

此策略在 CMake 3.1 版本中引入。在 CMake 4.0 版本中移除之前,可以透過 cmake_policy()cmake_minimum_required() 進行設定。如果未設定,CMake 會發出警告,並使用 OLD 行為。