CMP0054¶
在 3.1 版本加入.
仅在未加引号时将 if() 参数解释为变量或关键字。
CMake 3.1 及更高版本不再隐式取消引用变量或解释 if() 命令参数中的关键字,当它是 引用的参数 或 括号参数 时。
此策略的“旧”行为是取消引用变量并解释关键字,即使它们被引号或括号括起来。 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 版本 |发布|当未设置策略并使用“旧”行为时发出警告。使用 cmake_policy() 命令将其显式设置为 OLD 或 NEW。
备注
策略的“旧”行为是 :manual:根据定义 <cmake-policies(7)> 已弃用,并且可能会在未来版本的 CMake 中删除。