Simplify variable reference and escape sequence evaluation.

CMake 3.1 introduced a much faster implementation of evaluation of the Variable References and Escape Sequences documented in the cmake-language(7) manual. While the behavior is identical to the legacy implementation in most cases, some corner cases were cleaned up to simplify the behavior. Specifically:

  • Expansion of @VAR@ reference syntax defined by the configure_file() and string(CONFIGURE) commands is no longer performed in other contexts.

  • Literal ${VAR} reference syntax may contain only alphanumeric characters (A-Z, a-z, 0-9) and the characters _, ., /, -, and +. Variables with other characters in their name may still be referenced indirectly, e.g.

    set(varname "otherwise & disallowed $ characters")
  • The setting of policy CMP0010 is not considered, so improper variable reference syntax is always an error.

  • More characters are allowed to be escaped in variable names. Previously, only ()#" \@^ were valid characters to escape. Now any non-alphanumeric, non-semicolon, non-NUL character may be escaped following the escape_identity production in the Escape Sequences section of the cmake-language(7) manual.

The OLD behavior for this policy is to honor the legacy behavior for variable references and escape sequences. The NEW behavior is to use the simpler variable expansion and escape sequence evaluation rules.

This policy was introduced in CMake version 3.1. CMake version 3.11.4 warns when the policy is not set and uses OLD behavior. Use the cmake_policy() command to set it to OLD or NEW explicitly.


The OLD behavior of a policy is deprecated by definition and may be removed in a future version of CMake.