summaryrefslogtreecommitdiff
path: root/share/cmake-3.2/Help/policy/CMP0054.rst
blob: 39f0c40a94e84d9dece1c7b2861b188804407d6d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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:

::

  set(MONKEY 1)
  set(ANIMAL MONKEY)

  if("${ANIMAL}" STREQUAL "MONKEY")

After explicit expansion of variables this gives:

::

  if("MONKEY" STREQUAL "MONKEY")

With the policy set to ``OLD`` implicit expansion reduces this semantically to:

::

  if("1" STREQUAL "1")

With the policy set to ``NEW`` the quoted arguments will not be
further dereferenced:

::

  if("MONKEY" STREQUAL "MONKEY")

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.