From c3c00460b2dcb45999ec520ad99a88cf88ac7f87 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 6 May 2024 20:37:19 -0400 Subject: [PATCH] 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). --- Help/manual/cmake-generator-expressions.7.rst | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/Help/manual/cmake-generator-expressions.7.rst b/Help/manual/cmake-generator-expressions.7.rst index 1db237cfbf..f8c722b8af 100644 --- a/Help/manual/cmake-generator-expressions.7.rst +++ b/Help/manual/cmake-generator-expressions.7.rst @@ -1777,26 +1777,32 @@ The expressions have special evaluation rules for some properties: :ref:`semicolon-separated list ` 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 ` 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.