cmGeneratorExpressionNode: implement COMPILE_ONLY genex

This generator expression is the inverse of `LINK_ONLY` and only coveys
usage requirements for the purposes of compilation. Its intended use is
to avoid needing to export targets that do not have link usage
requirements (e.g., header-only libraries) when used by another target.

See: #15415
This commit is contained in:
Robert Maynard
2023-04-11 15:49:52 -04:00
parent 0fb923c460
commit c42630ee62
10 changed files with 65 additions and 12 deletions

View File

@@ -966,15 +966,18 @@ Compile Context
.. versionadded:: 3.27
Content of ``...``, except while collecting :ref:`Target Usage Requirements`,
in which case it is the empty string. This is intended for use in an
:prop_tgt:`INTERFACE_LINK_LIBRARIES` target property, typically populated
via the :command:`target_link_libraries` command, to specify private
compilation requirements without other usage requirements.
Content of ``...``, when collecting :ref:`Target Usage Requirements`,
otherwise it is the empty string. This is intended for use in an
:prop_tgt:`INTERFACE_LINK_LIBRARIES` and :prop_tgt:`LINK_LIBRARIES` target
properties, typically populated via the :command:`target_link_libraries` command.
Provides compilation usage requirements without any linking requirements.
Use cases include header-only usage where all usages are known to not have
linking requirements (e.g., all-``inline`` or C++ template libraries).
Note that for proper evaluation of this expression requires policy :policy:`CMP0099`
to be set to `NEW`.
Linker Language And ID
^^^^^^^^^^^^^^^^^^^^^^