summaryrefslogtreecommitdiffstats
path: root/Help
diff options
context:
space:
mode:
authorBen Boeckel <ben.boeckel@kitware.com>2023-01-15 04:58:28 (GMT)
committerRobert Maynard <rmaynard@nvidia.com>2023-04-12 14:43:48 (GMT)
commit0fb923c46041d67110c8e0907afdf66b3b25f25a (patch)
tree471126bf0dcb9ef4481716d38524b57a01ca2973 /Help
parent6c11f7e4a8805189835c04a398864f96081b3183 (diff)
downloadCMake-0fb923c46041d67110c8e0907afdf66b3b25f25a.zip
CMake-0fb923c46041d67110c8e0907afdf66b3b25f25a.tar.gz
CMake-0fb923c46041d67110c8e0907afdf66b3b25f25a.tar.bz2
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. It will also be used to represent private usage requirements on exported C++ module-containing targets in the future. Eventually there should be logic to collapse nesting of `$<COMPILE_ONLY>` and `$<LINK_ONLY>` when generating instances of either. A TODO is left in the code for this case. See: #15415
Diffstat (limited to 'Help')
-rw-r--r--Help/manual/cmake-generator-expressions.7.rst19
-rw-r--r--Help/release/dev/genex-compile-only.rst5
2 files changed, 23 insertions, 1 deletions
diff --git a/Help/manual/cmake-generator-expressions.7.rst b/Help/manual/cmake-generator-expressions.7.rst
index 9da3799..186a9d2 100644
--- a/Help/manual/cmake-generator-expressions.7.rst
+++ b/Help/manual/cmake-generator-expressions.7.rst
@@ -959,6 +959,22 @@ Compile Features
:manual:`cmake-compile-features(7)` manual for information on
compile features and a list of supported compilers.
+Compile Context
+^^^^^^^^^^^^^^^
+
+.. genex:: $<COMPILE_ONLY:...>
+
+ .. 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.
+
+ Use cases include header-only usage where all usages are known to not have
+ linking requirements (e.g., all-``inline`` or C++ template libraries).
+
Linker Language And ID
^^^^^^^^^^^^^^^^^^^^^^
@@ -1339,7 +1355,8 @@ Link Context
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 link
- dependencies without other usage requirements.
+ dependencies without other usage requirements such as include directories or
+ compile options.
.. versionadded:: 3.24
``LINK_ONLY`` may also be used in a :prop_tgt:`LINK_LIBRARIES` target
diff --git a/Help/release/dev/genex-compile-only.rst b/Help/release/dev/genex-compile-only.rst
new file mode 100644
index 0000000..1f898d8
--- /dev/null
+++ b/Help/release/dev/genex-compile-only.rst
@@ -0,0 +1,5 @@
+genex-compile-only
+------------------
+
+* The :genex:`COMPILE_ONLY` generator expression has been added which provides
+ compilation usage requirements without any linking requirements.