| 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(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 "") |
| |
| 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. |
| |
| .. include:: DEPRECATED.txt |