Files
CMake/Help/policy/CMP0189.rst
T
Brad King e8d779c935 Help: Document when policy CMP0189 takes effect
This was left out of commit b3da9c6d60 (GenEx: Evaluate LINK_LIBRARIES
target properties transitively, 2025-02-24, v4.1.0-rc1~731^2).

Issue: #27220
2025-09-22 15:21:05 -04:00

34 lines
1.5 KiB
ReStructuredText

CMP0189
-------
.. versionadded:: 4.1
:genex:`TARGET_PROPERTY` evaluates ``LINK_LIBRARIES`` properties transitively.
The :prop_tgt:`LINK_LIBRARIES` and :prop_tgt:`INTERFACE_LINK_LIBRARIES`
target properties record link dependencies through which the
:genex:`TARGET_PROPERTY` generator expression evaluates transitive properties.
However, in CMake 4.0 and below, the properties themselves were not evaluated
transitively. CMake 4.1 and above prefer to evaluate the
:prop_tgt:`LINK_LIBRARIES` and :prop_tgt:`INTERFACE_LINK_LIBRARIES`
target properties transitively because they are among the
:ref:`build specification <Target Build Specification>` and
:ref:`usage requirement <Target Usage Requirements>` properties, respectively.
This policy provides compatibility for projects that have not been updated to
expect the new behavior. It takes effect during buildsystem generation.
Generator expressions are evaluated in each directory using the policy setting
as of the end of its ``CMakeLists.txt``.
The ``OLD`` behavior of this policy is for :genex:`TARGET_PROPERTY` to not
evaluate :prop_tgt:`LINK_LIBRARIES` and :prop_tgt:`INTERFACE_LINK_LIBRARIES`
transitively. The ``NEW`` behavior is for :genex:`TARGET_PROPERTY` to
evaluate :prop_tgt:`LINK_LIBRARIES` and :prop_tgt:`INTERFACE_LINK_LIBRARIES`
transitively.
.. |INTRODUCED_IN_CMAKE_VERSION| replace:: 4.1
.. |WARNS_OR_DOES_NOT_WARN| replace:: does *not* warn
.. include:: include/STANDARD_ADVICE.rst
.. include:: include/DEPRECATED.rst