New in version 3.21.

When this policy is set to NEW, the set(CACHE) command does not remove any normal variable of the same name from the current scope. The OLD behavior removes any normal variable of the same name from the current scope in the following situations:

  • No cache variable of that name existed previously.

  • A cache variable of that name existed previously, but it had no type. This can occur when the variable was set on the command line using a form like cmake -DMYVAR=blah instead of cmake -DMYVAR:STRING=blah.

  • The FORCE or INTERNAL keywords were used when setting the cache variable.

Note that the NEW behavior has an important difference to the similar NEW behavior of policy CMP0077. The set(CACHE) command always sets the cache variable if it did not exist previously, regardless of the CMP0126 policy setting. The option() command will not set the cache variable if a non-cache variable of the same name already exists and CMP0077 is set to NEW.

Policy CMP0126 was introduced in CMake version 3.21. Use the cmake_policy() command to set it to OLD or NEW explicitly within a project. Use the CMAKE_POLICY_DEFAULT_CMP0126 variable to set the policy for a third-party project in a subdirectory without modifying it. Unlike many policies, CMake version 3.28.6 does not warn when the policy is not set and simply uses OLD behavior. See documentation of the CMAKE_POLICY_WARNING_CMP0126 variable to control the warning.


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