mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-06 05:40:54 -06:00
Every policy's documentation has a paragraph on what version of CMake introduced it, how to set the policy, and whether CMake warns if the policy is not set. The wording of this paragraph has diverged across policies over time. Factor the paragraph out into a standard advice document included by every policy.
54 lines
1.2 KiB
ReStructuredText
54 lines
1.2 KiB
ReStructuredText
CMP0054
|
|
-------
|
|
|
|
.. versionadded:: 3.1
|
|
|
|
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:
|
|
|
|
::
|
|
|
|
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 "")
|
|
|
|
.. |INTRODUCED_IN_CMAKE_VERSION| replace:: 3.1
|
|
.. |WARNS_OR_DOES_NOT_WARN| replace:: warns
|
|
.. include:: STANDARD_ADVICE.txt
|
|
|
|
.. include:: DEPRECATED.txt
|