summaryrefslogtreecommitdiffstats
path: root/Help/manual
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2020-08-10 15:38:33 (GMT)
committerKitware Robot <kwrobot@kitware.com>2020-08-10 15:38:59 (GMT)
commitd6ee9b4a43210553b8f4d3a11413f744e2affb26 (patch)
treec6906fa8cb507cef60894bed1e554072e941ca6f /Help/manual
parente259ea433d7bf2c5a4858113dcf2e7079ae53b26 (diff)
parentbafa9fe8876387fa16cc8c03832d27df81238af1 (diff)
downloadCMake-d6ee9b4a43210553b8f4d3a11413f744e2affb26.zip
CMake-d6ee9b4a43210553b8f4d3a11413f744e2affb26.tar.gz
CMake-d6ee9b4a43210553b8f4d3a11413f744e2affb26.tar.bz2
Merge topic 'build-interface-targets'
bafa9fe887 fileapi: Add INTERFACE libraries with SOURCES to codemodel-v2 4391913133 Add INTERFACE libraries to generated buildsystem if they have SOURCES afb998704e Remove filtering of allowed INTERFACE library properties e7edba2baf Makefiles: Use IsInBuildSystem in global generator target type checks Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5078
Diffstat (limited to 'Help/manual')
-rw-r--r--Help/manual/cmake-buildsystem.7.rst42
-rw-r--r--Help/manual/cmake-file-api.7.rst3
2 files changed, 23 insertions, 22 deletions
diff --git a/Help/manual/cmake-buildsystem.7.rst b/Help/manual/cmake-buildsystem.7.rst
index d8142a2..cd27316 100644
--- a/Help/manual/cmake-buildsystem.7.rst
+++ b/Help/manual/cmake-buildsystem.7.rst
@@ -922,8 +922,8 @@ property from it:
Interface Libraries
-------------------
-An ``INTERFACE`` target has no :prop_tgt:`LOCATION` and is mutable, but is
-otherwise similar to an :prop_tgt:`IMPORTED` target.
+An ``INTERFACE`` library target does not compile sources and does not
+produce a library artifact on disk, so it has no :prop_tgt:`LOCATION`.
It may specify usage requirements such as
:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES`,
@@ -937,11 +937,22 @@ Only the ``INTERFACE`` modes of the :command:`target_include_directories`,
:command:`target_sources`, and :command:`target_link_libraries` commands
may be used with ``INTERFACE`` libraries.
+Since CMake 3.19, an ``INTERFACE`` library target may optionally contain
+source files. An interface library that contains source files will be
+included as a build target in the generated buildsystem. It does not
+compile sources, but may contain custom commands to generate other sources.
+Additionally, IDEs will show the source files as part of the target for
+interactive reading and editing.
+
A primary use-case for ``INTERFACE`` libraries is header-only libraries.
.. code-block:: cmake
- add_library(Eigen INTERFACE)
+ add_library(Eigen INTERFACE
+ src/eigen.h
+ src/vector.h
+ src/matrix.h
+ )
target_include_directories(Eigen INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
$<INSTALL_INTERFACE:include/Eigen>
@@ -975,25 +986,17 @@ This way, the build specification of ``exe1`` is expressed entirely as linked
targets, and the complexity of compiler-specific flags is encapsulated in an
``INTERFACE`` library target.
-The properties permitted to be set on or read from an ``INTERFACE`` library
-are:
-
-* Properties matching ``INTERFACE_*``
-* Built-in properties matching ``COMPATIBLE_INTERFACE_*``
-* ``EXPORT_NAME``
-* ``EXPORT_PROPERTIES``
-* ``IMPORTED``
-* ``MANUALLY_ADDED_DEPENDENCIES``
-* ``NAME``
-* Properties matching ``IMPORTED_LIBNAME_*``
-* Properties matching ``MAP_IMPORTED_CONFIG_*``
-
``INTERFACE`` libraries may be installed and exported. Any content they refer
to must be installed separately:
.. code-block:: cmake
- add_library(Eigen INTERFACE)
+ set(Eigen_headers
+ src/eigen.h
+ src/vector.h
+ src/matrix.h
+ )
+ add_library(Eigen INTERFACE ${Eigen_headers})
target_include_directories(Eigen INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
$<INSTALL_INTERFACE:include/Eigen>
@@ -1003,9 +1006,6 @@ to must be installed separately:
install(EXPORT eigenExport NAMESPACE Upstream::
DESTINATION lib/cmake/Eigen
)
- install(FILES
- ${CMAKE_CURRENT_SOURCE_DIR}/src/eigen.h
- ${CMAKE_CURRENT_SOURCE_DIR}/src/vector.h
- ${CMAKE_CURRENT_SOURCE_DIR}/src/matrix.h
+ install(FILES ${Eigen_headers}
DESTINATION include/Eigen
)
diff --git a/Help/manual/cmake-file-api.7.rst b/Help/manual/cmake-file-api.7.rst
index 34edc56..6876e1c 100644
--- a/Help/manual/cmake-file-api.7.rst
+++ b/Help/manual/cmake-file-api.7.rst
@@ -650,7 +650,8 @@ with members:
``type``
A string specifying the type of the target. The value is one of
``EXECUTABLE``, ``STATIC_LIBRARY``, ``SHARED_LIBRARY``,
- ``MODULE_LIBRARY``, ``OBJECT_LIBRARY``, or ``UTILITY``.
+ ``MODULE_LIBRARY``, ``OBJECT_LIBRARY``, ``INTERFACE_LIBRARY``,
+ or ``UTILITY``.
``backtrace``
Optional member that is present when a CMake language backtrace to