CMP0012 — CMake 4.2.6 Documentation

# CMP0012

Warning

The `OLD` behavior of this policy was removed in CMake version 4.0. This policy must be set to `NEW` by a call to `cmake_minimum_required()` or `cmake_policy()`.

`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. Prior to removal in CMake version 4.0, it could be set by `cmake_policy()` or `cmake_minimum_required()`. If it was not set, CMake warned, and used `OLD` behavior.