| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- CMP0054
- -------
- .. |REMOVED_IN_CMAKE_VERSION| replace:: 4.0
- .. include:: include/REMOVED_PROLOGUE.rst
- .. 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:
- .. code-block:: cmake
- 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:
- .. code-block:: cmake
- if("E" STREQUAL "")
- With the policy set to ``OLD`` implicit expansion reduces this semantically to:
- .. code-block:: cmake
- if("" STREQUAL "")
- With the policy set to ``NEW`` the quoted arguments will not be
- further dereferenced:
- .. code-block:: cmake
- if("E" STREQUAL "")
- .. |INTRODUCED_IN_CMAKE_VERSION| replace:: 3.1
- .. |WARNED_OR_DID_NOT_WARN| replace:: warned
- .. include:: include/REMOVED_EPILOGUE.rst
|