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
行为。