CMP0102 — CMake 4.3.0 Documentation

# CMP0102

Added in version 3.17.

The `mark_as_advanced()` command no longer creates a cache entry if one does not already exist.

In CMake 3.16 and below, if a variable was not defined at all or just defined locally, the `mark_as_advanced()` command would create a new cache entry with an `UNINITIALIZED` type and no value. When a `find_path()` (or other similar `find_` command) would next run, it would find this undefined cache entry and set it up with an empty string value. This process would end up deleting the local variable in the process (due to the way the cache works), effectively clearing any stored `find_` results that were only available in the local scope.

The `OLD` behavior for this policy is to create the empty cache definition. The `NEW` behavior of this policy is to ignore variables which do not already exist in the cache.

This policy was introduced in CMake version 3.17. It may be set by `cmake_policy()` or `cmake_minimum_required()`. If it is not set, CMake does not warn by default, and uses `OLD` behavior.

See documentation of the `CMAKE_POLICY_WARNING_CMP0102` variable to control the warning.

Note

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