CMP0054ΒΆ
Warning
The OLD
behavior of this policy was removed
in CMake version 4.0.
This policy must be set to NEW
by a call to
cmake_minimum_required()
or cmake_policy()
.
Added in version 3.1.
Only interpret if()
arguments as variables or keywords when unquoted.
CMake 3.1 and above no longer implicitly dereference variables or
interpret keywords in an if()
command argument when
it is a Quoted Argument or a Bracket Argument.
The OLD
behavior for this policy is to dereference variables and
interpret keywords even if they are quoted or bracketed.
The NEW
behavior is to not dereference variables or interpret keywords
that have been quoted or bracketed.
Given the following partial example:
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()
After explicit expansion of variables this gives:
if("E" STREQUAL "")
With the policy set to OLD
implicit expansion reduces this semantically to:
if("" STREQUAL "")
With the policy set to NEW
the quoted arguments will not be
further dereferenced:
if("E" STREQUAL "")
This policy was introduced in CMake version 3.1.
Prior to removal in CMake version 4.0, it could be
set by cmake_policy()
or cmake_minimum_required()
.
If it was not set, CMake warned, and used OLD
behavior.