Browse Source

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).
Brad King 1 year ago
parent
commit
c3c00460b2
1 changed files with 18 additions and 12 deletions
  1. 18 12
      Help/manual/cmake-generator-expressions.7.rst

+ 18 - 12
Help/manual/cmake-generator-expressions.7.rst

@@ -1777,26 +1777,32 @@ The expressions have special evaluation rules for some properties:
   :ref:`semicolon-separated list <CMake Language Lists>` representing the union
   :ref:`semicolon-separated list <CMake Language Lists>` representing the union
   of the value on the target itself with the values of the corresponding
   of the value on the target itself with the values of the corresponding
   :ref:`Target Usage Requirements` on targets named by the target's
   :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.
   Evaluation of :prop_tgt:`LINK_LIBRARIES` itself is not transitive.
 
 
 * :ref:`Target Usage Requirements` evaluate as a
 * :ref:`Target Usage Requirements` evaluate as a
   :ref:`semicolon-separated list <CMake Language Lists>` representing the union
   :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
   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`.
     See policy :policy:`CMP0166`.
 
 
   Evaluation of :prop_tgt:`INTERFACE_LINK_LIBRARIES` itself is not transitive.
   Evaluation of :prop_tgt:`INTERFACE_LINK_LIBRARIES` itself is not transitive.