Merge topic 'doc-transitive-properties'

c3c00460b2 Help: Clarify TARGET_PROPERTY genex evaluation of transitive properties
9ec61c72e3 Help: Add intro text to cmake-buildsystem(7) build properties sections

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !9499
This commit is contained in:
Brad King 2024-05-08 14:47:51 +00:00 committed by Kitware Robot
commit 8113197270
2 changed files with 30 additions and 12 deletions

View File

@ -314,6 +314,9 @@ dependencies.
Target Compile Properties
^^^^^^^^^^^^^^^^^^^^^^^^^
These represent the `build specification <Target Build Specification_>`_
for compiling a target.
:prop_tgt:`COMPILE_DEFINITIONS`
List of compile definitions for compiling sources in the target.
These are passed to the compiler with ``-D`` flags, or equivalent,
@ -378,6 +381,9 @@ Target Compile Properties
Target Link Properties
^^^^^^^^^^^^^^^^^^^^^^
These represent the `build specification <Target Build Specification_>`_
for linking a target.
:prop_tgt:`LINK_LIBRARIES`
List of link libraries for linking the target, if it is an executable,
shared library, or module library. Entries for `Normal Libraries`_ are
@ -510,6 +516,9 @@ command. See :ref:`Creating Packages` for more.
Transitive Compile Properties
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
These represent `usage requirements <Target Usage Requirements_>`_ for
compiling consumers.
:prop_tgt:`INTERFACE_COMPILE_DEFINITIONS`
List of compile definitions for compiling sources in the target's consumers.
Typically these are used by the target's header files.
@ -561,6 +570,9 @@ Transitive Compile Properties
Transitive Link Properties
^^^^^^^^^^^^^^^^^^^^^^^^^^
These represent `usage requirements <Target Usage Requirements_>`_ for
linking consumers.
:prop_tgt:`INTERFACE_LINK_LIBRARIES`
List of link libraries for linking the target's consumers, for
those that are executables, shared libraries, or module libraries.

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.