CMP0053ΒΆ
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 theconfigure_file()
andstring(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+
. Note that$
is technically allowed in theNEW
behavior, but is invalid forOLD
behavior. This is due to an oversight during the implementation ofCMP0053
and its use as a literal variable reference is discouraged for this reason. Variables with other characters in their name may still be referenced indirectly, e.g.set(varname "otherwise & disallowed $ characters") message("${${varname}}")
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 theescape_identity
production in the Escape Sequences section of thecmake-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.16.9 warns when the policy is not set and uses
OLD
behavior. Use the cmake_policy()
command to set
it to OLD
or NEW
explicitly.
Note
The OLD
behavior of a policy is
deprecated by definition
and may be removed in a future version of CMake.