### Navigation

- index
- next |
- previous |
- CMake »
- 3.1.0 Documentation »
- cmake-policies(7) »

# CMP0054

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(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 3.1.0 warns when the policy is not set and uses `OLD` behavior. Use the `cmake_policy()` command to set it to `OLD` or `NEW` explicitly.

### Navigation

- index
- next |
- previous |
- CMake »
- 3.1.0 Documentation »
- cmake-policies(7) »