CMP0022 — CMake 4.3.4 Documentation

# CMP0022

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()`.

`INTERFACE_LINK_LIBRARIES` defines the link interface.

CMake 2.8.11 constructed the 'link interface' of a target from properties matching `(IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)?`. The modern way to specify config-sensitive content is to use generator expressions and the `IMPORTED_` prefix makes uniform processing of the link interface with generator expressions impossible. The `INTERFACE_LINK_LIBRARIES` target property was introduced as a replacement in CMake 2.8.12. This new property is named consistently with the `INTERFACE_COMPILE_DEFINITIONS`, `INTERFACE_INCLUDE_DIRECTORIES` and `INTERFACE_COMPILE_OPTIONS` properties. For in-build targets, CMake will use the INTERFACE_LINK_LIBRARIES property as the source of the link interface only if policy `CMP0022` is `NEW`. When exporting a target which has this policy set to `NEW`, only the `INTERFACE_LINK_LIBRARIES` property will be processed and generated for the `IMPORTED` target by default. A new option to the `install(EXPORT)` and export commands allows export of the old-style properties for compatibility with downstream users of CMake versions older than 2.8.12. The `target_link_libraries()` command will no longer populate the properties matching `LINK_INTERFACE_LIBRARIES(_<CONFIG>)?` if this policy is `NEW`.

Warning-free future-compatible code which works with CMake 2.8.7 onwards can be written by using the `LINK_PRIVATE` and `LINK_PUBLIC` keywords of `target_link_libraries()`.

The `OLD` behavior for this policy is to ignore the `INTERFACE_LINK_LIBRARIES` property for in-build targets. The `NEW` behavior for this policy is to use the `INTERFACE_LINK_LIBRARIES` property for in-build targets, and ignore the old properties matching `(IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)?`.

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