CMP0012

From Get docs
Cmake/docs/3.21/policy/cmp0012


CMP0012

if() recognizes numbers and boolean constants.

In CMake versions 2.6.4 and lower the if() command implicitly dereferenced arguments corresponding to variables, even those named like numbers or boolean constants, except for 0 and 1. Numbers and boolean constants such as true, false, yes, no, on, off, y, n, notfound, ignore (all case insensitive) were recognized in some cases but not all. For example, the code if(TRUE) might have evaluated as false. Numbers such as 2 were recognized only in boolean expressions like if(NOT 2) (leading to false) but not as a single-argument like if(2) (also leading to false). Later versions of CMake prefer to treat numbers and boolean constants literally, so they should not be used as variable names.

The OLD behavior for this policy is to implicitly dereference variables named like numbers and boolean constants. The NEW behavior for this policy is to recognize numbers and boolean constants without dereferencing variables with such names.

This policy was introduced in CMake version 2.8.0. CMake version 3.21.0-rc3 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.


© 2000–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.21/policy/CMP0012.html