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() 命令将其显式设置为 OLDNEW

备注

策略的“旧”行为是 :manual:根据定义 <cmake-policies(7)> 已弃用,并且可能会在未来版本的 CMake 中删除。