cmake/Help/policy/CMP0054.rst

53 lines
1.3 KiB
ReStructuredText
Raw Normal View History

2015-04-27 22:25:09 +02:00
CMP0054
-------
Only interpret :command:`if` arguments as variables or keywords when unquoted.
CMake 3.1 and above no longer implicitly dereference variables or
interpret keywords in an :command:`if` command argument when
it is a :ref:`Quoted Argument` or a :ref:`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:
::
2015-08-17 11:37:30 +02:00
set(A E)
set(E "")
2015-04-27 22:25:09 +02:00
2015-08-17 11:37:30 +02:00
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()
2015-04-27 22:25:09 +02:00
After explicit expansion of variables this gives:
::
2015-08-17 11:37:30 +02:00
if("E" STREQUAL "")
2015-04-27 22:25:09 +02:00
With the policy set to ``OLD`` implicit expansion reduces this semantically to:
::
2015-08-17 11:37:30 +02:00
if("" STREQUAL "")
2015-04-27 22:25:09 +02:00
With the policy set to ``NEW`` the quoted arguments will not be
further dereferenced:
::
2015-08-17 11:37:30 +02:00
if("E" STREQUAL "")
2015-04-27 22:25:09 +02:00
This policy was introduced in CMake version 3.1.
CMake version |release| warns when the policy is not set and uses
``OLD`` behavior. Use the :command:`cmake_policy` command to set
it to ``OLD`` or ``NEW`` explicitly.
2015-08-17 11:37:30 +02:00
.. include:: DEPRECATED.txt