CMP0054¶
在 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_policy()
或 cmake_minimum_required()
进行设置。如果未进行设置,CMake 会发出警告并使用 OLD
行为。
注意
策略的 OLD
行为根据定义已弃用
,且可能在未来版本的 CMake 中被移除。