Help: Clarify TARGET_PROPERTY genex evaluation of transitive properties

Regularize and fill out a documentation pattern from commit ddb9442f48
(GenEx: Fix TARGET_PROPERTY evaluation of transitive link properties,
2024-04-22).
This commit is contained in:
Brad King 2024-05-06 20:37:19 -04:00
parent 9ec61c72e3
commit c3c00460b2

View File

@ -1777,26 +1777,32 @@ The expressions have special evaluation rules for some properties:
:ref:`semicolon-separated list <CMake Language Lists>` representing the union
of the value on the target itself with the values of the corresponding
:ref:`Target Usage Requirements` on targets named by the target's
:prop_tgt:`LINK_LIBRARIES`. Evaluation of the usage requirements is
transitive over the closure of the linked targets'
:prop_tgt:`INTERFACE_LINK_LIBRARIES`.
:prop_tgt:`LINK_LIBRARIES`:
* For :ref:`Target Compile Properties`, evaluation of corresponding usage
requirements is transitive over the closure of the linked targets'
:prop_tgt:`INTERFACE_LINK_LIBRARIES` *excluding* entries guarded by the
:genex:`LINK_ONLY` generator expression.
* For :ref:`Target Link Properties`, evaluation of corresponding usage
requirements is transitive over the closure of the linked targets'
:prop_tgt:`INTERFACE_LINK_LIBRARIES` *including* entries guarded by the
:genex:`LINK_ONLY` generator expression. See policy :policy:`CMP0166`.
Evaluation of :prop_tgt:`LINK_LIBRARIES` itself is not transitive.
* :ref:`Target Usage Requirements` evaluate as a
:ref:`semicolon-separated list <CMake Language Lists>` representing the union
of the value on the target itself with the values of the same properties on
targets named by the target's :prop_tgt:`INTERFACE_LINK_LIBRARIES`.
Evaluation is transitive over the closure of the target's
:prop_tgt:`INTERFACE_LINK_LIBRARIES`:
targets named by the target's :prop_tgt:`INTERFACE_LINK_LIBRARIES`:
* For :ref:`Transitive Compile Properties`, the transitive closure
*excludes* entries of :prop_tgt:`INTERFACE_LINK_LIBRARIES` guarded
by the :genex:`LINK_ONLY` generator expression.
* For :ref:`Transitive Compile Properties`, evaluation is transitive over
the closure of the target's :prop_tgt:`INTERFACE_LINK_LIBRARIES`
*excluding* entries guarded by the :genex:`LINK_ONLY` generator expression.
* For :ref:`Transitive Link Properties`, the transitive closure is
*includes* entries of :prop_tgt:`INTERFACE_LINK_LIBRARIES` guarded
by the :genex:`LINK_ONLY` generator expression.
* For :ref:`Transitive Link Properties`, evaluation is transitive over
the closure of the target's :prop_tgt:`INTERFACE_LINK_LIBRARIES`
*including* entries guarded by the :genex:`LINK_ONLY` generator expression.
See policy :policy:`CMP0166`.
Evaluation of :prop_tgt:`INTERFACE_LINK_LIBRARIES` itself is not transitive.