summaryrefslogtreecommitdiffstats
path: root/Help/command
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2023-08-02 16:59:56 (GMT)
committerBrad King <brad.king@kitware.com>2023-08-02 17:43:32 (GMT)
commit7a54bdf0c177fbc391648a13b4338fac5ee5a419 (patch)
treea1a47fc5082c5fd1ba37b2a51605d704149e707d /Help/command
parent1fd423d36885ba3808d706fb2e9ea924f15efa92 (diff)
downloadCMake-7a54bdf0c177fbc391648a13b4338fac5ee5a419.zip
CMake-7a54bdf0c177fbc391648a13b4338fac5ee5a419.tar.gz
CMake-7a54bdf0c177fbc391648a13b4338fac5ee5a419.tar.bz2
Help: Use signature directive for 'install' command
Replace manual anchors with signature directives. Indent each signature's documentation inside its directive.
Diffstat (limited to 'Help/command')
-rw-r--r--Help/command/install.rst1612
1 files changed, 820 insertions, 792 deletions
diff --git a/Help/command/install.rst b/Help/command/install.rst
index b56f20c..711378b 100644
--- a/Help/command/install.rst
+++ b/Help/command/install.rst
@@ -125,857 +125,885 @@ Installing Targets
^^^^^^^^^^^^^^^^^^
.. _`install(TARGETS)`:
-.. _TARGETS:
-
-.. code-block:: cmake
-
- install(TARGETS targets... [EXPORT <export-name>]
- [RUNTIME_DEPENDENCIES args...|RUNTIME_DEPENDENCY_SET <set-name>]
- [[ARCHIVE|LIBRARY|RUNTIME|OBJECTS|FRAMEWORK|BUNDLE|
- PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE|FILE_SET <set-name>|CXX_MODULES_BMI]
- [DESTINATION <dir>]
- [PERMISSIONS permissions...]
- [CONFIGURATIONS [Debug|Release|...]]
- [COMPONENT <component>]
- [NAMELINK_COMPONENT <component>]
- [OPTIONAL] [EXCLUDE_FROM_ALL]
- [NAMELINK_ONLY|NAMELINK_SKIP]
- ] [...]
- [INCLUDES DESTINATION [<dir> ...]]
- )
-
-The ``TARGETS`` form specifies rules for installing targets from a
-project. There are several kinds of target :ref:`Output Artifacts`
-that may be installed:
-
-``ARCHIVE``
- Target artifacts of this kind include:
-
- * *Static libraries*
- (except on macOS when marked as ``FRAMEWORK``, see below);
- * *DLL import libraries*
- (on all Windows-based systems including Cygwin; they have extension
- ``.lib``, in contrast to the ``.dll`` libraries that go to ``RUNTIME``);
- * On AIX, the *linker import file* created for executables with
- :prop_tgt:`ENABLE_EXPORTS` enabled.
- * On macOS, the *linker import file* created for shared libraries with
- :prop_tgt:`ENABLE_EXPORTS` enabled (except when marked as ``FRAMEWORK``,
- see below).
-
-``LIBRARY``
- Target artifacts of this kind include:
-
- * *Shared libraries*, except
-
- - DLLs (these go to ``RUNTIME``, see below),
- - on macOS when marked as ``FRAMEWORK`` (see below).
-
-``RUNTIME``
- Target artifacts of this kind include:
-
- * *Executables*
- (except on macOS when marked as ``MACOSX_BUNDLE``, see ``BUNDLE`` below);
- * DLLs (on all Windows-based systems including Cygwin; note that the
- accompanying import libraries are of kind ``ARCHIVE``).
-
-``OBJECTS``
- .. versionadded:: 3.9
-
- Object files associated with *object libraries*.
-
-``FRAMEWORK``
- Both static and shared libraries marked with the ``FRAMEWORK``
- property are treated as ``FRAMEWORK`` targets on macOS.
-
-``BUNDLE``
- Executables marked with the :prop_tgt:`MACOSX_BUNDLE` property are treated as
- ``BUNDLE`` targets on macOS.
-
-``PUBLIC_HEADER``
- Any :prop_tgt:`PUBLIC_HEADER` files associated with a library are installed in
- the destination specified by the ``PUBLIC_HEADER`` argument on non-Apple
- platforms. Rules defined by this argument are ignored for :prop_tgt:`FRAMEWORK`
- libraries on Apple platforms because the associated files are installed
- into the appropriate locations inside the framework folder. See
- :prop_tgt:`PUBLIC_HEADER` for details.
-
-``PRIVATE_HEADER``
- Similar to ``PUBLIC_HEADER``, but for ``PRIVATE_HEADER`` files. See
- :prop_tgt:`PRIVATE_HEADER` for details.
-
-``RESOURCE``
- Similar to ``PUBLIC_HEADER`` and ``PRIVATE_HEADER``, but for
- ``RESOURCE`` files. See :prop_tgt:`RESOURCE` for details.
-
-``FILE_SET <set>``
- .. versionadded:: 3.23
-
- File sets are defined by the :command:`target_sources(FILE_SET)` command.
- If the file set ``<set>`` exists and is ``PUBLIC`` or ``INTERFACE``, any
- files in the set are installed under the destination (see below).
- The directory structure relative to the file set's base directories is
- preserved. For example, a file added to the file set as
- ``/blah/include/myproj/here.h`` with a base directory ``/blah/include``
- would be installed to ``myproj/here.h`` below the destination.
-
-``CXX_MODULES_BMI``
-
- .. note ::
-
- Experimental. Gated by ``CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API``
-
- Any module files from C++ modules from ``PUBLIC`` sources in a file set of
- type ``CXX_MODULES`` will be installed to the given ``DESTINATION``. All
- modules are placed directly in the destination as no directory structure is
- derived from the names of the modules. An empty ``DESTINATION`` may be used
- to suppress installing these files (for use in generic code).
-
-For each of these arguments given, the arguments following them only apply
-to the target or file type specified in the argument. If none is given, the
-installation properties apply to all target types.
-
-For regular executables, static libraries and shared libraries, the
-``DESTINATION`` argument is not required. For these target types, when
-``DESTINATION`` is omitted, a default destination will be taken from the
-appropriate variable from :module:`GNUInstallDirs`, or set to a built-in
-default value if that variable is not defined. The same is true for file
-sets, and the public and private headers associated with the installed
-targets through the :prop_tgt:`PUBLIC_HEADER` and :prop_tgt:`PRIVATE_HEADER`
-target properties. A destination must always be provided for module libraries,
-Apple bundles and frameworks. A destination can be omitted for interface and
-object libraries, but they are handled differently (see the discussion of this
-topic toward the end of this section).
-
-For shared libraries on DLL platforms, if neither ``RUNTIME`` nor ``ARCHIVE``
-destinations are specified, both the ``RUNTIME`` and ``ARCHIVE`` components are
-installed to their default destinations. If either a ``RUNTIME`` or ``ARCHIVE``
-destination is specified, the component is installed to that destination, and
-the other component is not installed. If both ``RUNTIME`` and ``ARCHIVE``
-destinations are specified, then both components are installed to their
-respective destinations.
-
-The following table shows the target types with their associated variables and
-built-in defaults that apply when no destination is given:
-
-=============================== =============================== ======================
- Target Type GNUInstallDirs Variable Built-In Default
-=============================== =============================== ======================
-``RUNTIME`` ``${CMAKE_INSTALL_BINDIR}`` ``bin``
-``LIBRARY`` ``${CMAKE_INSTALL_LIBDIR}`` ``lib``
-``ARCHIVE`` ``${CMAKE_INSTALL_LIBDIR}`` ``lib``
-``PRIVATE_HEADER`` ``${CMAKE_INSTALL_INCLUDEDIR}`` ``include``
-``PUBLIC_HEADER`` ``${CMAKE_INSTALL_INCLUDEDIR}`` ``include``
-``FILE_SET`` (type ``HEADERS``) ``${CMAKE_INSTALL_INCLUDEDIR}`` ``include``
-=============================== =============================== ======================
-
-Projects wishing to follow the common practice of installing headers into a
-project-specific subdirectory may prefer using file sets with appropriate
-paths and base directories. Otherwise, they must provide a ``DESTINATION``
-instead of being able to rely on the above (see next example below).
-
-To make packages compliant with distribution filesystem layout policies, if
-projects must specify a ``DESTINATION``, it is recommended that they use a
-path that begins with the appropriate :module:`GNUInstallDirs` variable.
-This allows package maintainers to control the install destination by setting
-the appropriate cache variables. The following example shows a static library
-being installed to the default destination provided by
-:module:`GNUInstallDirs`, but with its headers installed to a project-specific
-subdirectory without using file sets:
-
-.. code-block:: cmake
-
- add_library(mylib STATIC ...)
- set_target_properties(mylib PROPERTIES PUBLIC_HEADER mylib.h)
- include(GNUInstallDirs)
- install(TARGETS mylib
- PUBLIC_HEADER
- DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/myproj
- )
-
-In addition to the common options listed above, each target can accept
-the following additional arguments:
-
-``NAMELINK_COMPONENT``
- .. versionadded:: 3.12
-
- On some platforms a versioned shared library has a symbolic link such
- as::
-
- lib<name>.so -> lib<name>.so.1
-
- where ``lib<name>.so.1`` is the soname of the library and ``lib<name>.so``
- is a "namelink" allowing linkers to find the library when given
- ``-l<name>``. The ``NAMELINK_COMPONENT`` option is similar to the
- ``COMPONENT`` option, but it changes the installation component of a shared
- library namelink if one is generated. If not specified, this defaults to the
- value of ``COMPONENT``. It is an error to use this parameter outside of a
- ``LIBRARY`` block.
-
- .. versionchanged:: 3.27
- This parameter is also usable for an ``ARCHIVE`` block to manage
- the linker import file created, on macOS, for shared libraries with
- :prop_tgt:`ENABLE_EXPORTS` enabled.
-
- Consider the following example:
- .. code-block:: cmake
-
- install(TARGETS mylib
- LIBRARY
- COMPONENT Libraries
- NAMELINK_COMPONENT Development
- PUBLIC_HEADER
- COMPONENT Development
- )
-
- In this scenario, if you choose to install only the ``Development``
- component, both the headers and namelink will be installed without the
- library. (If you don't also install the ``Libraries`` component, the
- namelink will be a dangling symlink, and projects that link to the library
- will have build errors.) If you install only the ``Libraries`` component,
- only the library will be installed, without the headers and namelink.
-
- This option is typically used for package managers that have separate
- runtime and development packages. For example, on Debian systems, the
- library is expected to be in the runtime package, and the headers and
- namelink are expected to be in the development package.
-
- See the :prop_tgt:`VERSION` and :prop_tgt:`SOVERSION` target properties for
- details on creating versioned shared libraries.
-
-``NAMELINK_ONLY``
- This option causes the installation of only the namelink when a library
- target is installed. On platforms where versioned shared libraries do not
- have namelinks or when a library is not versioned, the ``NAMELINK_ONLY``
- option installs nothing. It is an error to use this parameter outside of a
- ``LIBRARY`` block.
-
- .. versionchanged:: 3.27
- This parameter is also usable for an ``ARCHIVE`` block to manage
- the linker import file created, on macOS, for shared libraries with
- :prop_tgt:`ENABLE_EXPORTS` enabled.
-
- When ``NAMELINK_ONLY`` is given, either ``NAMELINK_COMPONENT`` or
- ``COMPONENT`` may be used to specify the installation component of the
- namelink, but ``COMPONENT`` should generally be preferred.
-
-``NAMELINK_SKIP``
- Similar to ``NAMELINK_ONLY``, but it has the opposite effect: it causes the
- installation of library files other than the namelink when a library target
- is installed. When neither ``NAMELINK_ONLY`` or ``NAMELINK_SKIP`` are given,
- both portions are installed. On platforms where versioned shared libraries
- do not have symlinks or when a library is not versioned, ``NAMELINK_SKIP``
- installs the library. It is an error to use this parameter outside of a
- ``LIBRARY`` block.
-
- .. versionchanged:: 3.27
- This parameter is also usable for an ``ARCHIVE`` block to manage
- the linker import file created, on macOS, for shared libraries with
- :prop_tgt:`ENABLE_EXPORTS` enabled.
-
- If ``NAMELINK_SKIP`` is specified, ``NAMELINK_COMPONENT`` has no effect. It
- is not recommended to use ``NAMELINK_SKIP`` in conjunction with
- ``NAMELINK_COMPONENT``.
-
-The `install(TARGETS)`_ command can also accept the following options at the
-top level:
-
-``EXPORT``
- This option associates the installed target files with an export called
- ``<export-name>``. It must appear before any target options. To actually
- install the export file itself, call `install(EXPORT)`_, documented below.
- See documentation of the :prop_tgt:`EXPORT_NAME` target property to change
- the name of the exported target.
-
- If ``EXPORT`` is used and the targets include ``PUBLIC`` or ``INTERFACE``
- file sets, all of them must be specified with ``FILE_SET`` arguments. All
- ``PUBLIC`` or ``INTERFACE`` file sets associated with a target are included
- in the export.
-
-``INCLUDES DESTINATION``
- This option specifies a list of directories which will be added to the
- :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` target property of the
- ``<targets>`` when exported by the `install(EXPORT)`_ command. If a
- relative path is specified, it is treated as relative to the
- :genex:`$<INSTALL_PREFIX>`.
-
-``RUNTIME_DEPENDENCY_SET``
- .. versionadded:: 3.21
+.. signature::
+ install(TARGETS <target>... [...])
- This option causes all runtime dependencies of installed executable, shared
- library, and module targets to be added to the specified runtime dependency
- set. This set can then be installed with an
- `install(RUNTIME_DEPENDENCY_SET)`_ command.
+ Install target :ref:`Output Artifacts` and associated files:
- This keyword and the ``RUNTIME_DEPENDENCIES`` keyword are mutually
- exclusive.
+ .. code-block:: cmake
-``RUNTIME_DEPENDENCIES``
- .. versionadded:: 3.21
+ install(TARGETS targets... [EXPORT <export-name>]
+ [RUNTIME_DEPENDENCIES args...|RUNTIME_DEPENDENCY_SET <set-name>]
+ [[ARCHIVE|LIBRARY|RUNTIME|OBJECTS|FRAMEWORK|BUNDLE|
+ PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE|FILE_SET <set-name>|CXX_MODULES_BMI]
+ [DESTINATION <dir>]
+ [PERMISSIONS permissions...]
+ [CONFIGURATIONS [Debug|Release|...]]
+ [COMPONENT <component>]
+ [NAMELINK_COMPONENT <component>]
+ [OPTIONAL] [EXCLUDE_FROM_ALL]
+ [NAMELINK_ONLY|NAMELINK_SKIP]
+ ] [...]
+ [INCLUDES DESTINATION [<dir> ...]]
+ )
+
+ The ``TARGETS`` form specifies rules for installing targets from a
+ project. There are several kinds of target :ref:`Output Artifacts`
+ that may be installed:
+
+ ``ARCHIVE``
+ Target artifacts of this kind include:
+
+ * *Static libraries*
+ (except on macOS when marked as ``FRAMEWORK``, see below);
+ * *DLL import libraries*
+ (on all Windows-based systems including Cygwin; they have extension
+ ``.lib``, in contrast to the ``.dll`` libraries that go to ``RUNTIME``);
+ * On AIX, the *linker import file* created for executables with
+ :prop_tgt:`ENABLE_EXPORTS` enabled.
+ * On macOS, the *linker import file* created for shared libraries with
+ :prop_tgt:`ENABLE_EXPORTS` enabled (except when marked as ``FRAMEWORK``,
+ see below).
+
+ ``LIBRARY``
+ Target artifacts of this kind include:
+
+ * *Shared libraries*, except
+
+ - DLLs (these go to ``RUNTIME``, see below),
+ - on macOS when marked as ``FRAMEWORK`` (see below).
+
+ ``RUNTIME``
+ Target artifacts of this kind include:
+
+ * *Executables*
+ (except on macOS when marked as ``MACOSX_BUNDLE``, see ``BUNDLE`` below);
+ * DLLs (on all Windows-based systems including Cygwin; note that the
+ accompanying import libraries are of kind ``ARCHIVE``).
+
+ ``OBJECTS``
+ .. versionadded:: 3.9
+
+ Object files associated with *object libraries*.
+
+ ``FRAMEWORK``
+ Both static and shared libraries marked with the ``FRAMEWORK``
+ property are treated as ``FRAMEWORK`` targets on macOS.
+
+ ``BUNDLE``
+ Executables marked with the :prop_tgt:`MACOSX_BUNDLE` property are treated as
+ ``BUNDLE`` targets on macOS.
+
+ ``PUBLIC_HEADER``
+ Any :prop_tgt:`PUBLIC_HEADER` files associated with a library are installed in
+ the destination specified by the ``PUBLIC_HEADER`` argument on non-Apple
+ platforms. Rules defined by this argument are ignored for :prop_tgt:`FRAMEWORK`
+ libraries on Apple platforms because the associated files are installed
+ into the appropriate locations inside the framework folder. See
+ :prop_tgt:`PUBLIC_HEADER` for details.
+
+ ``PRIVATE_HEADER``
+ Similar to ``PUBLIC_HEADER``, but for ``PRIVATE_HEADER`` files. See
+ :prop_tgt:`PRIVATE_HEADER` for details.
+
+ ``RESOURCE``
+ Similar to ``PUBLIC_HEADER`` and ``PRIVATE_HEADER``, but for
+ ``RESOURCE`` files. See :prop_tgt:`RESOURCE` for details.
+
+ ``FILE_SET <set>``
+ .. versionadded:: 3.23
+
+ File sets are defined by the :command:`target_sources(FILE_SET)` command.
+ If the file set ``<set>`` exists and is ``PUBLIC`` or ``INTERFACE``, any
+ files in the set are installed under the destination (see below).
+ The directory structure relative to the file set's base directories is
+ preserved. For example, a file added to the file set as
+ ``/blah/include/myproj/here.h`` with a base directory ``/blah/include``
+ would be installed to ``myproj/here.h`` below the destination.
+
+ ``CXX_MODULES_BMI``
+
+ .. note ::
+
+ Experimental. Gated by ``CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API``
+
+ Any module files from C++ modules from ``PUBLIC`` sources in a file set of
+ type ``CXX_MODULES`` will be installed to the given ``DESTINATION``. All
+ modules are placed directly in the destination as no directory structure is
+ derived from the names of the modules. An empty ``DESTINATION`` may be used
+ to suppress installing these files (for use in generic code).
+
+ For each of these arguments given, the arguments following them only apply
+ to the target or file type specified in the argument. If none is given, the
+ installation properties apply to all target types.
+
+ For regular executables, static libraries and shared libraries, the
+ ``DESTINATION`` argument is not required. For these target types, when
+ ``DESTINATION`` is omitted, a default destination will be taken from the
+ appropriate variable from :module:`GNUInstallDirs`, or set to a built-in
+ default value if that variable is not defined. The same is true for file
+ sets, and the public and private headers associated with the installed
+ targets through the :prop_tgt:`PUBLIC_HEADER` and :prop_tgt:`PRIVATE_HEADER`
+ target properties. A destination must always be provided for module libraries,
+ Apple bundles and frameworks. A destination can be omitted for interface and
+ object libraries, but they are handled differently (see the discussion of this
+ topic toward the end of this section).
+
+ For shared libraries on DLL platforms, if neither ``RUNTIME`` nor ``ARCHIVE``
+ destinations are specified, both the ``RUNTIME`` and ``ARCHIVE`` components are
+ installed to their default destinations. If either a ``RUNTIME`` or ``ARCHIVE``
+ destination is specified, the component is installed to that destination, and
+ the other component is not installed. If both ``RUNTIME`` and ``ARCHIVE``
+ destinations are specified, then both components are installed to their
+ respective destinations.
+
+ The following table shows the target types with their associated variables and
+ built-in defaults that apply when no destination is given:
+
+ =============================== =============================== ======================
+ Target Type GNUInstallDirs Variable Built-In Default
+ =============================== =============================== ======================
+ ``RUNTIME`` ``${CMAKE_INSTALL_BINDIR}`` ``bin``
+ ``LIBRARY`` ``${CMAKE_INSTALL_LIBDIR}`` ``lib``
+ ``ARCHIVE`` ``${CMAKE_INSTALL_LIBDIR}`` ``lib``
+ ``PRIVATE_HEADER`` ``${CMAKE_INSTALL_INCLUDEDIR}`` ``include``
+ ``PUBLIC_HEADER`` ``${CMAKE_INSTALL_INCLUDEDIR}`` ``include``
+ ``FILE_SET`` (type ``HEADERS``) ``${CMAKE_INSTALL_INCLUDEDIR}`` ``include``
+ =============================== =============================== ======================
+
+ Projects wishing to follow the common practice of installing headers into a
+ project-specific subdirectory may prefer using file sets with appropriate
+ paths and base directories. Otherwise, they must provide a ``DESTINATION``
+ instead of being able to rely on the above (see next example below).
+
+ To make packages compliant with distribution filesystem layout policies, if
+ projects must specify a ``DESTINATION``, it is recommended that they use a
+ path that begins with the appropriate :module:`GNUInstallDirs` variable.
+ This allows package maintainers to control the install destination by setting
+ the appropriate cache variables. The following example shows a static library
+ being installed to the default destination provided by
+ :module:`GNUInstallDirs`, but with its headers installed to a project-specific
+ subdirectory without using file sets:
- This option causes all runtime dependencies of installed executable, shared
- library, and module targets to be installed along with the targets
- themselves. The ``RUNTIME``, ``LIBRARY``, ``FRAMEWORK``, and generic
- arguments are used to determine the properties (``DESTINATION``,
- ``COMPONENT``, etc.) of the installation of these dependencies.
+ .. code-block:: cmake
- ``RUNTIME_DEPENDENCIES`` is semantically equivalent to the following pair
- of calls:
+ add_library(mylib STATIC ...)
+ set_target_properties(mylib PROPERTIES PUBLIC_HEADER mylib.h)
+ include(GNUInstallDirs)
+ install(TARGETS mylib
+ PUBLIC_HEADER
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/myproj
+ )
+
+ In addition to the common options listed above, each target can accept
+ the following additional arguments:
+
+ ``NAMELINK_COMPONENT``
+ .. versionadded:: 3.12
+
+ On some platforms a versioned shared library has a symbolic link such
+ as::
+
+ lib<name>.so -> lib<name>.so.1
+
+ where ``lib<name>.so.1`` is the soname of the library and ``lib<name>.so``
+ is a "namelink" allowing linkers to find the library when given
+ ``-l<name>``. The ``NAMELINK_COMPONENT`` option is similar to the
+ ``COMPONENT`` option, but it changes the installation component of a shared
+ library namelink if one is generated. If not specified, this defaults to the
+ value of ``COMPONENT``. It is an error to use this parameter outside of a
+ ``LIBRARY`` block.
+
+ .. versionchanged:: 3.27
+ This parameter is also usable for an ``ARCHIVE`` block to manage
+ the linker import file created, on macOS, for shared libraries with
+ :prop_tgt:`ENABLE_EXPORTS` enabled.
+
+ Consider the following example:
+
+ .. code-block:: cmake
+
+ install(TARGETS mylib
+ LIBRARY
+ COMPONENT Libraries
+ NAMELINK_COMPONENT Development
+ PUBLIC_HEADER
+ COMPONENT Development
+ )
+
+ In this scenario, if you choose to install only the ``Development``
+ component, both the headers and namelink will be installed without the
+ library. (If you don't also install the ``Libraries`` component, the
+ namelink will be a dangling symlink, and projects that link to the library
+ will have build errors.) If you install only the ``Libraries`` component,
+ only the library will be installed, without the headers and namelink.
+
+ This option is typically used for package managers that have separate
+ runtime and development packages. For example, on Debian systems, the
+ library is expected to be in the runtime package, and the headers and
+ namelink are expected to be in the development package.
+
+ See the :prop_tgt:`VERSION` and :prop_tgt:`SOVERSION` target properties for
+ details on creating versioned shared libraries.
+
+ ``NAMELINK_ONLY``
+ This option causes the installation of only the namelink when a library
+ target is installed. On platforms where versioned shared libraries do not
+ have namelinks or when a library is not versioned, the ``NAMELINK_ONLY``
+ option installs nothing. It is an error to use this parameter outside of a
+ ``LIBRARY`` block.
+
+ .. versionchanged:: 3.27
+ This parameter is also usable for an ``ARCHIVE`` block to manage
+ the linker import file created, on macOS, for shared libraries with
+ :prop_tgt:`ENABLE_EXPORTS` enabled.
+
+ When ``NAMELINK_ONLY`` is given, either ``NAMELINK_COMPONENT`` or
+ ``COMPONENT`` may be used to specify the installation component of the
+ namelink, but ``COMPONENT`` should generally be preferred.
+
+ ``NAMELINK_SKIP``
+ Similar to ``NAMELINK_ONLY``, but it has the opposite effect: it causes the
+ installation of library files other than the namelink when a library target
+ is installed. When neither ``NAMELINK_ONLY`` or ``NAMELINK_SKIP`` are given,
+ both portions are installed. On platforms where versioned shared libraries
+ do not have symlinks or when a library is not versioned, ``NAMELINK_SKIP``
+ installs the library. It is an error to use this parameter outside of a
+ ``LIBRARY`` block.
+
+ .. versionchanged:: 3.27
+ This parameter is also usable for an ``ARCHIVE`` block to manage
+ the linker import file created, on macOS, for shared libraries with
+ :prop_tgt:`ENABLE_EXPORTS` enabled.
+
+ If ``NAMELINK_SKIP`` is specified, ``NAMELINK_COMPONENT`` has no effect. It
+ is not recommended to use ``NAMELINK_SKIP`` in conjunction with
+ ``NAMELINK_COMPONENT``.
+
+ The `install(TARGETS)`_ command can also accept the following options at the
+ top level:
+
+ ``EXPORT``
+ This option associates the installed target files with an export called
+ ``<export-name>``. It must appear before any target options. To actually
+ install the export file itself, call `install(EXPORT)`_, documented below.
+ See documentation of the :prop_tgt:`EXPORT_NAME` target property to change
+ the name of the exported target.
+
+ If ``EXPORT`` is used and the targets include ``PUBLIC`` or ``INTERFACE``
+ file sets, all of them must be specified with ``FILE_SET`` arguments. All
+ ``PUBLIC`` or ``INTERFACE`` file sets associated with a target are included
+ in the export.
+
+ ``INCLUDES DESTINATION``
+ This option specifies a list of directories which will be added to the
+ :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` target property of the
+ ``<targets>`` when exported by the `install(EXPORT)`_ command. If a
+ relative path is specified, it is treated as relative to the
+ :genex:`$<INSTALL_PREFIX>`.
+
+ ``RUNTIME_DEPENDENCY_SET``
+ .. versionadded:: 3.21
+
+ This option causes all runtime dependencies of installed executable, shared
+ library, and module targets to be added to the specified runtime dependency
+ set. This set can then be installed with an
+ `install(RUNTIME_DEPENDENCY_SET)`_ command.
+
+ This keyword and the ``RUNTIME_DEPENDENCIES`` keyword are mutually
+ exclusive.
+
+ ``RUNTIME_DEPENDENCIES``
+ .. versionadded:: 3.21
+
+ This option causes all runtime dependencies of installed executable, shared
+ library, and module targets to be installed along with the targets
+ themselves. The ``RUNTIME``, ``LIBRARY``, ``FRAMEWORK``, and generic
+ arguments are used to determine the properties (``DESTINATION``,
+ ``COMPONENT``, etc.) of the installation of these dependencies.
+
+ ``RUNTIME_DEPENDENCIES`` is semantically equivalent to the following pair
+ of calls:
+
+ .. code-block:: cmake
+
+ install(TARGETS ... RUNTIME_DEPENDENCY_SET <set-name>)
+ install(RUNTIME_DEPENDENCY_SET <set-name> args...)
+
+ where ``<set-name>`` will be a randomly generated set name.
+ The ``args...`` may include any of the following keywords supported by
+ the `install(RUNTIME_DEPENDENCY_SET)`_ command:
+
+ * ``DIRECTORIES``
+ * ``PRE_INCLUDE_REGEXES``
+ * ``PRE_EXCLUDE_REGEXES``
+ * ``POST_INCLUDE_REGEXES``
+ * ``POST_EXCLUDE_REGEXES``
+ * ``POST_INCLUDE_FILES``
+ * ``POST_EXCLUDE_FILES``
+
+ The ``RUNTIME_DEPENDENCIES`` and ``RUNTIME_DEPENDENCY_SET`` keywords are
+ mutually exclusive.
+
+ One or more groups of properties may be specified in a single call to
+ the ``TARGETS`` form of this command. A target may be installed more than
+ once to different locations. Consider hypothetical targets ``myExe``,
+ ``mySharedLib``, and ``myStaticLib``. The code:
.. code-block:: cmake
- install(TARGETS ... RUNTIME_DEPENDENCY_SET <set-name>)
- install(RUNTIME_DEPENDENCY_SET <set-name> args...)
-
- where ``<set-name>`` will be a randomly generated set name.
- The ``args...`` may include any of the following keywords supported by
- the `install(RUNTIME_DEPENDENCY_SET)`_ command:
-
- * ``DIRECTORIES``
- * ``PRE_INCLUDE_REGEXES``
- * ``PRE_EXCLUDE_REGEXES``
- * ``POST_INCLUDE_REGEXES``
- * ``POST_EXCLUDE_REGEXES``
- * ``POST_INCLUDE_FILES``
- * ``POST_EXCLUDE_FILES``
-
- The ``RUNTIME_DEPENDENCIES`` and ``RUNTIME_DEPENDENCY_SET`` keywords are
- mutually exclusive.
-
-One or more groups of properties may be specified in a single call to
-the ``TARGETS`` form of this command. A target may be installed more than
-once to different locations. Consider hypothetical targets ``myExe``,
-``mySharedLib``, and ``myStaticLib``. The code:
-
-.. code-block:: cmake
-
- install(TARGETS myExe mySharedLib myStaticLib
- RUNTIME DESTINATION bin
- LIBRARY DESTINATION lib
- ARCHIVE DESTINATION lib/static)
- install(TARGETS mySharedLib DESTINATION /some/full/path)
-
-will install ``myExe`` to ``<prefix>/bin`` and ``myStaticLib`` to
-``<prefix>/lib/static``. On non-DLL platforms ``mySharedLib`` will be
-installed to ``<prefix>/lib`` and ``/some/full/path``. On DLL platforms
-the ``mySharedLib`` DLL will be installed to ``<prefix>/bin`` and
-``/some/full/path`` and its import library will be installed to
-``<prefix>/lib/static`` and ``/some/full/path``.
-
-:ref:`Interface Libraries` may be listed among the targets to install.
-They install no artifacts but will be included in an associated ``EXPORT``.
-If :ref:`Object Libraries` are listed but given no destination for their
-object files, they will be exported as :ref:`Interface Libraries`.
-This is sufficient to satisfy transitive usage requirements of other
-targets that link to the object libraries in their implementation.
-
-Installing a target with the :prop_tgt:`EXCLUDE_FROM_ALL` target property
-set to ``TRUE`` has undefined behavior.
-
-.. versionadded:: 3.3
- An install destination given as a ``DESTINATION`` argument may
- use "generator expressions" with the syntax ``$<...>``. See the
- :manual:`cmake-generator-expressions(7)` manual for available expressions.
-
-.. versionadded:: 3.13
- `install(TARGETS)`_ can install targets that were created in
- other directories. When using such cross-directory install rules, running
- ``make install`` (or similar) from a subdirectory will not guarantee that
- targets from other directories are up-to-date. You can use
- :command:`target_link_libraries` or :command:`add_dependencies`
- to ensure that such out-of-directory targets are built before the
- subdirectory-specific install rules are run.
+ install(TARGETS myExe mySharedLib myStaticLib
+ RUNTIME DESTINATION bin
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib/static)
+ install(TARGETS mySharedLib DESTINATION /some/full/path)
+
+ will install ``myExe`` to ``<prefix>/bin`` and ``myStaticLib`` to
+ ``<prefix>/lib/static``. On non-DLL platforms ``mySharedLib`` will be
+ installed to ``<prefix>/lib`` and ``/some/full/path``. On DLL platforms
+ the ``mySharedLib`` DLL will be installed to ``<prefix>/bin`` and
+ ``/some/full/path`` and its import library will be installed to
+ ``<prefix>/lib/static`` and ``/some/full/path``.
+
+ :ref:`Interface Libraries` may be listed among the targets to install.
+ They install no artifacts but will be included in an associated ``EXPORT``.
+ If :ref:`Object Libraries` are listed but given no destination for their
+ object files, they will be exported as :ref:`Interface Libraries`.
+ This is sufficient to satisfy transitive usage requirements of other
+ targets that link to the object libraries in their implementation.
+
+ Installing a target with the :prop_tgt:`EXCLUDE_FROM_ALL` target property
+ set to ``TRUE`` has undefined behavior.
+
+ .. versionadded:: 3.3
+ An install destination given as a ``DESTINATION`` argument may
+ use "generator expressions" with the syntax ``$<...>``. See the
+ :manual:`cmake-generator-expressions(7)` manual for available expressions.
+
+ .. versionadded:: 3.13
+ `install(TARGETS)`_ can install targets that were created in
+ other directories. When using such cross-directory install rules, running
+ ``make install`` (or similar) from a subdirectory will not guarantee that
+ targets from other directories are up-to-date. You can use
+ :command:`target_link_libraries` or :command:`add_dependencies`
+ to ensure that such out-of-directory targets are built before the
+ subdirectory-specific install rules are run.
Installing Imported Runtime Artifacts
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. _`install(IMPORTED_RUNTIME_ARTIFACTS)`:
-.. _IMPORTED_RUNTIME_ARTIFACTS:
-
-.. versionadded:: 3.21
-
-.. code-block:: cmake
-
- install(IMPORTED_RUNTIME_ARTIFACTS targets...
- [RUNTIME_DEPENDENCY_SET <set-name>]
- [[LIBRARY|RUNTIME|FRAMEWORK|BUNDLE]
- [DESTINATION <dir>]
- [PERMISSIONS permissions...]
- [CONFIGURATIONS [Debug|Release|...]]
- [COMPONENT <component>]
- [OPTIONAL] [EXCLUDE_FROM_ALL]
- ] [...]
- )
-
-The ``IMPORTED_RUNTIME_ARTIFACTS`` form specifies rules for installing the
-runtime artifacts of imported targets. Projects may do this if they want to
-bundle outside executables or modules inside their installation. The
-``LIBRARY``, ``RUNTIME``, ``FRAMEWORK``, and ``BUNDLE`` arguments have the
-same semantics that they do in the `TARGETS`_ mode. Only the runtime artifacts
-of imported targets are installed (except in the case of :prop_tgt:`FRAMEWORK`
-libraries, :prop_tgt:`MACOSX_BUNDLE` executables, and :prop_tgt:`BUNDLE`
-CFBundles.) For example, headers and import libraries associated with DLLs are
-not installed. In the case of :prop_tgt:`FRAMEWORK` libraries,
-:prop_tgt:`MACOSX_BUNDLE` executables, and :prop_tgt:`BUNDLE` CFBundles, the
-entire directory is installed.
-
-The ``RUNTIME_DEPENDENCY_SET`` option causes the runtime artifacts of the
-imported executable, shared library, and module library ``targets`` to be
-added to the ``<set-name>`` runtime dependency set. This set can then be
-installed with an `install(RUNTIME_DEPENDENCY_SET)`_ command.
+
+.. signature::
+ install(IMPORTED_RUNTIME_ARTIFACTS <target>... [...])
+
+ .. versionadded:: 3.21
+
+ Install runtime artifacts of imported targets:
+
+ .. code-block:: cmake
+
+ install(IMPORTED_RUNTIME_ARTIFACTS targets...
+ [RUNTIME_DEPENDENCY_SET <set-name>]
+ [[LIBRARY|RUNTIME|FRAMEWORK|BUNDLE]
+ [DESTINATION <dir>]
+ [PERMISSIONS permissions...]
+ [CONFIGURATIONS [Debug|Release|...]]
+ [COMPONENT <component>]
+ [OPTIONAL] [EXCLUDE_FROM_ALL]
+ ] [...]
+ )
+
+ The ``IMPORTED_RUNTIME_ARTIFACTS`` form specifies rules for installing the
+ runtime artifacts of imported targets. Projects may do this if they want to
+ bundle outside executables or modules inside their installation. The
+ ``LIBRARY``, ``RUNTIME``, ``FRAMEWORK``, and ``BUNDLE`` arguments have the
+ same semantics that they do in the `TARGETS`_ mode. Only the runtime artifacts
+ of imported targets are installed (except in the case of :prop_tgt:`FRAMEWORK`
+ libraries, :prop_tgt:`MACOSX_BUNDLE` executables, and :prop_tgt:`BUNDLE`
+ CFBundles.) For example, headers and import libraries associated with DLLs are
+ not installed. In the case of :prop_tgt:`FRAMEWORK` libraries,
+ :prop_tgt:`MACOSX_BUNDLE` executables, and :prop_tgt:`BUNDLE` CFBundles, the
+ entire directory is installed.
+
+ The ``RUNTIME_DEPENDENCY_SET`` option causes the runtime artifacts of the
+ imported executable, shared library, and module library ``targets`` to be
+ added to the ``<set-name>`` runtime dependency set. This set can then be
+ installed with an `install(RUNTIME_DEPENDENCY_SET)`_ command.
Installing Files
^^^^^^^^^^^^^^^^
.. _`install(FILES)`:
.. _`install(PROGRAMS)`:
-.. _FILES:
-.. _PROGRAMS:
-.. note::
+.. signature::
+ install(FILES <file>... [...])
+ install(PROGRAMS <program>... [...])
- If installing header files, consider using file sets defined by
- :command:`target_sources(FILE_SET)` instead. File sets associate
- headers with a target and they install as part of the target.
-
-.. code-block:: cmake
-
- install(<FILES|PROGRAMS> files...
- TYPE <type> | DESTINATION <dir>
- [PERMISSIONS permissions...]
- [CONFIGURATIONS [Debug|Release|...]]
- [COMPONENT <component>]
- [RENAME <name>] [OPTIONAL] [EXCLUDE_FROM_ALL])
-
-The ``FILES`` form specifies rules for installing files for a project.
-File names given as relative paths are interpreted with respect to the
-current source directory. Files installed by this form are by default
-given permissions ``OWNER_WRITE``, ``OWNER_READ``, ``GROUP_READ``, and
-``WORLD_READ`` if no ``PERMISSIONS`` argument is given.
-
-The ``PROGRAMS`` form is identical to the ``FILES`` form except that the
-default permissions for the installed file also include ``OWNER_EXECUTE``,
-``GROUP_EXECUTE``, and ``WORLD_EXECUTE``. This form is intended to install
-programs that are not targets, such as shell scripts. Use the ``TARGETS``
-form to install targets built within the project.
-
-The list of ``files...`` given to ``FILES`` or ``PROGRAMS`` may use
-"generator expressions" with the syntax ``$<...>``. See the
-:manual:`cmake-generator-expressions(7)` manual for available expressions.
-However, if any item begins in a generator expression it must evaluate
-to a full path.
-
-Either a ``TYPE`` or a ``DESTINATION`` must be provided, but not both.
-A ``TYPE`` argument specifies the generic file type of the files being
-installed. A destination will then be set automatically by taking the
-corresponding variable from :module:`GNUInstallDirs`, or by using a
-built-in default if that variable is not defined. See the table below for
-the supported file types and their corresponding variables and built-in
-defaults. Projects can provide a ``DESTINATION`` argument instead of a
-file type if they wish to explicitly define the install destination.
-
-======================= ================================== =========================
- ``TYPE`` Argument GNUInstallDirs Variable Built-In Default
-======================= ================================== =========================
-``BIN`` ``${CMAKE_INSTALL_BINDIR}`` ``bin``
-``SBIN`` ``${CMAKE_INSTALL_SBINDIR}`` ``sbin``
-``LIB`` ``${CMAKE_INSTALL_LIBDIR}`` ``lib``
-``INCLUDE`` ``${CMAKE_INSTALL_INCLUDEDIR}`` ``include``
-``SYSCONF`` ``${CMAKE_INSTALL_SYSCONFDIR}`` ``etc``
-``SHAREDSTATE`` ``${CMAKE_INSTALL_SHARESTATEDIR}`` ``com``
-``LOCALSTATE`` ``${CMAKE_INSTALL_LOCALSTATEDIR}`` ``var``
-``RUNSTATE`` ``${CMAKE_INSTALL_RUNSTATEDIR}`` ``<LOCALSTATE dir>/run``
-``DATA`` ``${CMAKE_INSTALL_DATADIR}`` ``<DATAROOT dir>``
-``INFO`` ``${CMAKE_INSTALL_INFODIR}`` ``<DATAROOT dir>/info``
-``LOCALE`` ``${CMAKE_INSTALL_LOCALEDIR}`` ``<DATAROOT dir>/locale``
-``MAN`` ``${CMAKE_INSTALL_MANDIR}`` ``<DATAROOT dir>/man``
-``DOC`` ``${CMAKE_INSTALL_DOCDIR}`` ``<DATAROOT dir>/doc``
-======================= ================================== =========================
-
-Projects wishing to follow the common practice of installing headers into a
-project-specific subdirectory will need to provide a destination rather than
-rely on the above. Using file sets for headers instead of ``install(FILES)``
-would be even better (see :command:`target_sources(FILE_SET)`).
-
-Note that some of the types' built-in defaults use the ``DATAROOT`` directory as
-a prefix. The ``DATAROOT`` prefix is calculated similarly to the types, with
-``CMAKE_INSTALL_DATAROOTDIR`` as the variable and ``share`` as the built-in
-default. You cannot use ``DATAROOT`` as a ``TYPE`` parameter; please use
-``DATA`` instead.
-
-To make packages compliant with distribution filesystem layout policies, if
-projects must specify a ``DESTINATION``, it is recommended that they use a
-path that begins with the appropriate :module:`GNUInstallDirs` variable.
-This allows package maintainers to control the install destination by setting
-the appropriate cache variables. The following example shows how to follow
-this advice while installing an image to a project-specific documentation
-subdirectory:
-
-.. code-block:: cmake
-
- include(GNUInstallDirs)
- install(FILES logo.png
- DESTINATION ${CMAKE_INSTALL_DOCDIR}/myproj
- )
-
-.. versionadded:: 3.4
- An install destination given as a ``DESTINATION`` argument may
- use "generator expressions" with the syntax ``$<...>``. See the
- :manual:`cmake-generator-expressions(7)` manual for available expressions.
+ .. note::
+
+ If installing header files, consider using file sets defined by
+ :command:`target_sources(FILE_SET)` instead. File sets associate
+ headers with a target and they install as part of the target.
+
+ Install files or programs:
+
+ .. code-block:: cmake
-.. versionadded:: 3.20
- An install rename given as a ``RENAME`` argument may
- use "generator expressions" with the syntax ``$<...>``. See the
+ install(<FILES|PROGRAMS> files...
+ TYPE <type> | DESTINATION <dir>
+ [PERMISSIONS permissions...]
+ [CONFIGURATIONS [Debug|Release|...]]
+ [COMPONENT <component>]
+ [RENAME <name>] [OPTIONAL] [EXCLUDE_FROM_ALL])
+
+ The ``FILES`` form specifies rules for installing files for a project.
+ File names given as relative paths are interpreted with respect to the
+ current source directory. Files installed by this form are by default
+ given permissions ``OWNER_WRITE``, ``OWNER_READ``, ``GROUP_READ``, and
+ ``WORLD_READ`` if no ``PERMISSIONS`` argument is given.
+
+ The ``PROGRAMS`` form is identical to the ``FILES`` form except that the
+ default permissions for the installed file also include ``OWNER_EXECUTE``,
+ ``GROUP_EXECUTE``, and ``WORLD_EXECUTE``. This form is intended to install
+ programs that are not targets, such as shell scripts. Use the ``TARGETS``
+ form to install targets built within the project.
+
+ The list of ``files...`` given to ``FILES`` or ``PROGRAMS`` may use
+ "generator expressions" with the syntax ``$<...>``. See the
:manual:`cmake-generator-expressions(7)` manual for available expressions.
+ However, if any item begins in a generator expression it must evaluate
+ to a full path.
+
+ Either a ``TYPE`` or a ``DESTINATION`` must be provided, but not both.
+ A ``TYPE`` argument specifies the generic file type of the files being
+ installed. A destination will then be set automatically by taking the
+ corresponding variable from :module:`GNUInstallDirs`, or by using a
+ built-in default if that variable is not defined. See the table below for
+ the supported file types and their corresponding variables and built-in
+ defaults. Projects can provide a ``DESTINATION`` argument instead of a
+ file type if they wish to explicitly define the install destination.
+
+ ======================= ================================== =========================
+ ``TYPE`` Argument GNUInstallDirs Variable Built-In Default
+ ======================= ================================== =========================
+ ``BIN`` ``${CMAKE_INSTALL_BINDIR}`` ``bin``
+ ``SBIN`` ``${CMAKE_INSTALL_SBINDIR}`` ``sbin``
+ ``LIB`` ``${CMAKE_INSTALL_LIBDIR}`` ``lib``
+ ``INCLUDE`` ``${CMAKE_INSTALL_INCLUDEDIR}`` ``include``
+ ``SYSCONF`` ``${CMAKE_INSTALL_SYSCONFDIR}`` ``etc``
+ ``SHAREDSTATE`` ``${CMAKE_INSTALL_SHARESTATEDIR}`` ``com``
+ ``LOCALSTATE`` ``${CMAKE_INSTALL_LOCALSTATEDIR}`` ``var``
+ ``RUNSTATE`` ``${CMAKE_INSTALL_RUNSTATEDIR}`` ``<LOCALSTATE dir>/run``
+ ``DATA`` ``${CMAKE_INSTALL_DATADIR}`` ``<DATAROOT dir>``
+ ``INFO`` ``${CMAKE_INSTALL_INFODIR}`` ``<DATAROOT dir>/info``
+ ``LOCALE`` ``${CMAKE_INSTALL_LOCALEDIR}`` ``<DATAROOT dir>/locale``
+ ``MAN`` ``${CMAKE_INSTALL_MANDIR}`` ``<DATAROOT dir>/man``
+ ``DOC`` ``${CMAKE_INSTALL_DOCDIR}`` ``<DATAROOT dir>/doc``
+ ======================= ================================== =========================
+
+ Projects wishing to follow the common practice of installing headers into a
+ project-specific subdirectory will need to provide a destination rather than
+ rely on the above. Using file sets for headers instead of ``install(FILES)``
+ would be even better (see :command:`target_sources(FILE_SET)`).
+
+ Note that some of the types' built-in defaults use the ``DATAROOT`` directory as
+ a prefix. The ``DATAROOT`` prefix is calculated similarly to the types, with
+ ``CMAKE_INSTALL_DATAROOTDIR`` as the variable and ``share`` as the built-in
+ default. You cannot use ``DATAROOT`` as a ``TYPE`` parameter; please use
+ ``DATA`` instead.
+
+ To make packages compliant with distribution filesystem layout policies, if
+ projects must specify a ``DESTINATION``, it is recommended that they use a
+ path that begins with the appropriate :module:`GNUInstallDirs` variable.
+ This allows package maintainers to control the install destination by setting
+ the appropriate cache variables. The following example shows how to follow
+ this advice while installing an image to a project-specific documentation
+ subdirectory:
+
+ .. code-block:: cmake
+
+ include(GNUInstallDirs)
+ install(FILES logo.png
+ DESTINATION ${CMAKE_INSTALL_DOCDIR}/myproj
+ )
+
+ .. versionadded:: 3.4
+ An install destination given as a ``DESTINATION`` argument may
+ use "generator expressions" with the syntax ``$<...>``. See the
+ :manual:`cmake-generator-expressions(7)` manual for available expressions.
+
+ .. versionadded:: 3.20
+ An install rename given as a ``RENAME`` argument may
+ use "generator expressions" with the syntax ``$<...>``. See the
+ :manual:`cmake-generator-expressions(7)` manual for available expressions.
Installing Directories
^^^^^^^^^^^^^^^^^^^^^^
.. _`install(DIRECTORY)`:
-.. _DIRECTORY:
-.. note::
+.. signature::
+ install(DIRECTORY <dir>... [...])
- To install a directory sub-tree of headers, consider using file sets
- defined by :command:`target_sources(FILE_SET)` instead. File sets not only
- preserve directory structure, they also associate headers with a target
- and install as part of the target.
-
-.. code-block:: cmake
-
- install(DIRECTORY dirs...
- TYPE <type> | DESTINATION <dir>
- [FILE_PERMISSIONS permissions...]
- [DIRECTORY_PERMISSIONS permissions...]
- [USE_SOURCE_PERMISSIONS] [OPTIONAL] [MESSAGE_NEVER]
- [CONFIGURATIONS [Debug|Release|...]]
- [COMPONENT <component>] [EXCLUDE_FROM_ALL]
- [FILES_MATCHING]
- [[PATTERN <pattern> | REGEX <regex>]
- [EXCLUDE] [PERMISSIONS permissions...]] [...])
-
-The ``DIRECTORY`` form installs contents of one or more directories to a
-given destination. The directory structure is copied verbatim to the
-destination. The last component of each directory name is appended to
-the destination directory but a trailing slash may be used to avoid
-this because it leaves the last component empty. Directory names
-given as relative paths are interpreted with respect to the current
-source directory. If no input directory names are given the
-destination directory will be created but nothing will be installed
-into it. The ``FILE_PERMISSIONS`` and ``DIRECTORY_PERMISSIONS`` options
-specify permissions given to files and directories in the destination.
-If ``USE_SOURCE_PERMISSIONS`` is specified and ``FILE_PERMISSIONS`` is not,
-file permissions will be copied from the source directory structure.
-If no permissions are specified files will be given the default
-permissions specified in the ``FILES`` form of the command, and the
-directories will be given the default permissions specified in the
-``PROGRAMS`` form of the command.
+ .. note::
-.. versionadded:: 3.1
- The ``MESSAGE_NEVER`` option disables file installation status output.
-
-Installation of directories may be controlled with fine granularity
-using the ``PATTERN`` or ``REGEX`` options. These "match" options specify a
-globbing pattern or regular expression to match directories or files
-encountered within input directories. They may be used to apply
-certain options (see below) to a subset of the files and directories
-encountered. The full path to each input file or directory (with
-forward slashes) is matched against the expression. A ``PATTERN`` will
-match only complete file names: the portion of the full path matching
-the pattern must occur at the end of the file name and be preceded by
-a slash. A ``REGEX`` will match any portion of the full path but it may
-use ``/`` and ``$`` to simulate the ``PATTERN`` behavior. By default all
-files and directories are installed whether or not they are matched.
-The ``FILES_MATCHING`` option may be given before the first match option
-to disable installation of files (but not directories) not matched by
-any expression. For example, the code
-
-.. code-block:: cmake
-
- install(DIRECTORY src/ DESTINATION doc/myproj
- FILES_MATCHING PATTERN "*.png")
-
-will extract and install images from a source tree.
-
-Some options may follow a ``PATTERN`` or ``REGEX`` expression as described
-under :ref:`string(REGEX) <Regex Specification>` and are applied
-only to files or directories matching them. The ``EXCLUDE`` option will
-skip the matched file or directory. The ``PERMISSIONS`` option overrides
-the permissions setting for the matched file or directory. For
-example the code
-
-.. code-block:: cmake
-
- install(DIRECTORY icons scripts/ DESTINATION share/myproj
- PATTERN "CVS" EXCLUDE
- PATTERN "scripts/*"
- PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
- GROUP_EXECUTE GROUP_READ)
-
-will install the ``icons`` directory to ``share/myproj/icons`` and the
-``scripts`` directory to ``share/myproj``. The icons will get default
-file permissions, the scripts will be given specific permissions, and any
-``CVS`` directories will be excluded.
-
-Either a ``TYPE`` or a ``DESTINATION`` must be provided, but not both.
-A ``TYPE`` argument specifies the generic file type of the files within the
-listed directories being installed. A destination will then be set
-automatically by taking the corresponding variable from
-:module:`GNUInstallDirs`, or by using a built-in default if that variable
-is not defined. See the table below for the supported file types and their
-corresponding variables and built-in defaults. Projects can provide a
-``DESTINATION`` argument instead of a file type if they wish to explicitly
-define the install destination.
-
-======================= ================================== =========================
- ``TYPE`` Argument GNUInstallDirs Variable Built-In Default
-======================= ================================== =========================
-``BIN`` ``${CMAKE_INSTALL_BINDIR}`` ``bin``
-``SBIN`` ``${CMAKE_INSTALL_SBINDIR}`` ``sbin``
-``LIB`` ``${CMAKE_INSTALL_LIBDIR}`` ``lib``
-``INCLUDE`` ``${CMAKE_INSTALL_INCLUDEDIR}`` ``include``
-``SYSCONF`` ``${CMAKE_INSTALL_SYSCONFDIR}`` ``etc``
-``SHAREDSTATE`` ``${CMAKE_INSTALL_SHARESTATEDIR}`` ``com``
-``LOCALSTATE`` ``${CMAKE_INSTALL_LOCALSTATEDIR}`` ``var``
-``RUNSTATE`` ``${CMAKE_INSTALL_RUNSTATEDIR}`` ``<LOCALSTATE dir>/run``
-``DATA`` ``${CMAKE_INSTALL_DATADIR}`` ``<DATAROOT dir>``
-``INFO`` ``${CMAKE_INSTALL_INFODIR}`` ``<DATAROOT dir>/info``
-``LOCALE`` ``${CMAKE_INSTALL_LOCALEDIR}`` ``<DATAROOT dir>/locale``
-``MAN`` ``${CMAKE_INSTALL_MANDIR}`` ``<DATAROOT dir>/man``
-``DOC`` ``${CMAKE_INSTALL_DOCDIR}`` ``<DATAROOT dir>/doc``
-======================= ================================== =========================
-
-Note that some of the types' built-in defaults use the ``DATAROOT`` directory as
-a prefix. The ``DATAROOT`` prefix is calculated similarly to the types, with
-``CMAKE_INSTALL_DATAROOTDIR`` as the variable and ``share`` as the built-in
-default. You cannot use ``DATAROOT`` as a ``TYPE`` parameter; please use
-``DATA`` instead.
-
-To make packages compliant with distribution filesystem layout policies, if
-projects must specify a ``DESTINATION``, it is recommended that they use a
-path that begins with the appropriate :module:`GNUInstallDirs` variable.
-This allows package maintainers to control the install destination by setting
-the appropriate cache variables.
-
-.. versionadded:: 3.4
- An install destination given as a ``DESTINATION`` argument may
- use "generator expressions" with the syntax ``$<...>``. See the
- :manual:`cmake-generator-expressions(7)` manual for available expressions.
+ To install a directory sub-tree of headers, consider using file sets
+ defined by :command:`target_sources(FILE_SET)` instead. File sets not only
+ preserve directory structure, they also associate headers with a target
+ and install as part of the target.
-.. versionadded:: 3.5
- The list of ``dirs...`` given to ``DIRECTORY`` may use
- "generator expressions" too.
+ Install the contents of one or more directories:
+
+ .. code-block:: cmake
+
+ install(DIRECTORY dirs...
+ TYPE <type> | DESTINATION <dir>
+ [FILE_PERMISSIONS permissions...]
+ [DIRECTORY_PERMISSIONS permissions...]
+ [USE_SOURCE_PERMISSIONS] [OPTIONAL] [MESSAGE_NEVER]
+ [CONFIGURATIONS [Debug|Release|...]]
+ [COMPONENT <component>] [EXCLUDE_FROM_ALL]
+ [FILES_MATCHING]
+ [[PATTERN <pattern> | REGEX <regex>]
+ [EXCLUDE] [PERMISSIONS permissions...]] [...])
+
+ The ``DIRECTORY`` form installs contents of one or more directories to a
+ given destination. The directory structure is copied verbatim to the
+ destination. The last component of each directory name is appended to
+ the destination directory but a trailing slash may be used to avoid
+ this because it leaves the last component empty. Directory names
+ given as relative paths are interpreted with respect to the current
+ source directory. If no input directory names are given the
+ destination directory will be created but nothing will be installed
+ into it. The ``FILE_PERMISSIONS`` and ``DIRECTORY_PERMISSIONS`` options
+ specify permissions given to files and directories in the destination.
+ If ``USE_SOURCE_PERMISSIONS`` is specified and ``FILE_PERMISSIONS`` is not,
+ file permissions will be copied from the source directory structure.
+ If no permissions are specified files will be given the default
+ permissions specified in the ``FILES`` form of the command, and the
+ directories will be given the default permissions specified in the
+ ``PROGRAMS`` form of the command.
+
+ .. versionadded:: 3.1
+ The ``MESSAGE_NEVER`` option disables file installation status output.
+
+ Installation of directories may be controlled with fine granularity
+ using the ``PATTERN`` or ``REGEX`` options. These "match" options specify a
+ globbing pattern or regular expression to match directories or files
+ encountered within input directories. They may be used to apply
+ certain options (see below) to a subset of the files and directories
+ encountered. The full path to each input file or directory (with
+ forward slashes) is matched against the expression. A ``PATTERN`` will
+ match only complete file names: the portion of the full path matching
+ the pattern must occur at the end of the file name and be preceded by
+ a slash. A ``REGEX`` will match any portion of the full path but it may
+ use ``/`` and ``$`` to simulate the ``PATTERN`` behavior. By default all
+ files and directories are installed whether or not they are matched.
+ The ``FILES_MATCHING`` option may be given before the first match option
+ to disable installation of files (but not directories) not matched by
+ any expression. For example, the code
+
+ .. code-block:: cmake
+
+ install(DIRECTORY src/ DESTINATION doc/myproj
+ FILES_MATCHING PATTERN "*.png")
+
+ will extract and install images from a source tree.
+
+ Some options may follow a ``PATTERN`` or ``REGEX`` expression as described
+ under :ref:`string(REGEX) <Regex Specification>` and are applied
+ only to files or directories matching them. The ``EXCLUDE`` option will
+ skip the matched file or directory. The ``PERMISSIONS`` option overrides
+ the permissions setting for the matched file or directory. For
+ example the code
+
+ .. code-block:: cmake
+
+ install(DIRECTORY icons scripts/ DESTINATION share/myproj
+ PATTERN "CVS" EXCLUDE
+ PATTERN "scripts/*"
+ PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
+ GROUP_EXECUTE GROUP_READ)
+
+ will install the ``icons`` directory to ``share/myproj/icons`` and the
+ ``scripts`` directory to ``share/myproj``. The icons will get default
+ file permissions, the scripts will be given specific permissions, and any
+ ``CVS`` directories will be excluded.
+
+ Either a ``TYPE`` or a ``DESTINATION`` must be provided, but not both.
+ A ``TYPE`` argument specifies the generic file type of the files within the
+ listed directories being installed. A destination will then be set
+ automatically by taking the corresponding variable from
+ :module:`GNUInstallDirs`, or by using a built-in default if that variable
+ is not defined. See the table below for the supported file types and their
+ corresponding variables and built-in defaults. Projects can provide a
+ ``DESTINATION`` argument instead of a file type if they wish to explicitly
+ define the install destination.
+
+ ======================= ================================== =========================
+ ``TYPE`` Argument GNUInstallDirs Variable Built-In Default
+ ======================= ================================== =========================
+ ``BIN`` ``${CMAKE_INSTALL_BINDIR}`` ``bin``
+ ``SBIN`` ``${CMAKE_INSTALL_SBINDIR}`` ``sbin``
+ ``LIB`` ``${CMAKE_INSTALL_LIBDIR}`` ``lib``
+ ``INCLUDE`` ``${CMAKE_INSTALL_INCLUDEDIR}`` ``include``
+ ``SYSCONF`` ``${CMAKE_INSTALL_SYSCONFDIR}`` ``etc``
+ ``SHAREDSTATE`` ``${CMAKE_INSTALL_SHARESTATEDIR}`` ``com``
+ ``LOCALSTATE`` ``${CMAKE_INSTALL_LOCALSTATEDIR}`` ``var``
+ ``RUNSTATE`` ``${CMAKE_INSTALL_RUNSTATEDIR}`` ``<LOCALSTATE dir>/run``
+ ``DATA`` ``${CMAKE_INSTALL_DATADIR}`` ``<DATAROOT dir>``
+ ``INFO`` ``${CMAKE_INSTALL_INFODIR}`` ``<DATAROOT dir>/info``
+ ``LOCALE`` ``${CMAKE_INSTALL_LOCALEDIR}`` ``<DATAROOT dir>/locale``
+ ``MAN`` ``${CMAKE_INSTALL_MANDIR}`` ``<DATAROOT dir>/man``
+ ``DOC`` ``${CMAKE_INSTALL_DOCDIR}`` ``<DATAROOT dir>/doc``
+ ======================= ================================== =========================
+
+ Note that some of the types' built-in defaults use the ``DATAROOT`` directory as
+ a prefix. The ``DATAROOT`` prefix is calculated similarly to the types, with
+ ``CMAKE_INSTALL_DATAROOTDIR`` as the variable and ``share`` as the built-in
+ default. You cannot use ``DATAROOT`` as a ``TYPE`` parameter; please use
+ ``DATA`` instead.
+
+ To make packages compliant with distribution filesystem layout policies, if
+ projects must specify a ``DESTINATION``, it is recommended that they use a
+ path that begins with the appropriate :module:`GNUInstallDirs` variable.
+ This allows package maintainers to control the install destination by setting
+ the appropriate cache variables.
+
+ .. versionadded:: 3.4
+ An install destination given as a ``DESTINATION`` argument may
+ use "generator expressions" with the syntax ``$<...>``. See the
+ :manual:`cmake-generator-expressions(7)` manual for available expressions.
+
+ .. versionadded:: 3.5
+ The list of ``dirs...`` given to ``DIRECTORY`` may use
+ "generator expressions" too.
Custom Installation Logic
^^^^^^^^^^^^^^^^^^^^^^^^^
.. _`install(CODE)`:
.. _`install(SCRIPT)`:
-.. _CODE:
-.. _SCRIPT:
-.. code-block:: cmake
+.. signature::
+ install(SCRIPT <file> [...])
+ install(CODE <code> [...])
+
+ Invoke CMake scripts or code during installation:
- install([[SCRIPT <file>] [CODE <code>]]
- [ALL_COMPONENTS | COMPONENT <component>]
- [EXCLUDE_FROM_ALL] [...])
+ .. code-block:: cmake
-The ``SCRIPT`` form will invoke the given CMake script files during
-installation. If the script file name is a relative path it will be
-interpreted with respect to the current source directory. The ``CODE``
-form will invoke the given CMake code during installation. Code is
-specified as a single argument inside a double-quoted string. For
-example, the code
+ install([[SCRIPT <file>] [CODE <code>]]
+ [ALL_COMPONENTS | COMPONENT <component>]
+ [EXCLUDE_FROM_ALL] [...])
-.. code-block:: cmake
+ The ``SCRIPT`` form will invoke the given CMake script files during
+ installation. If the script file name is a relative path it will be
+ interpreted with respect to the current source directory. The ``CODE``
+ form will invoke the given CMake code during installation. Code is
+ specified as a single argument inside a double-quoted string. For
+ example, the code
- install(CODE "MESSAGE(\"Sample install message.\")")
+ .. code-block:: cmake
-will print a message during installation.
+ install(CODE "MESSAGE(\"Sample install message.\")")
-.. versionadded:: 3.21
- When the ``ALL_COMPONENTS`` option is given, the custom installation
- script code will be executed for every component of a component-specific
- installation. This option is mutually exclusive with the ``COMPONENT``
- option.
+ will print a message during installation.
-.. versionadded:: 3.14
- ``<file>`` or ``<code>`` may use "generator expressions" with the syntax
- ``$<...>`` (in the case of ``<file>``, this refers to their use in the file
- name, not the file's contents). See the
- :manual:`cmake-generator-expressions(7)` manual for available expressions.
+ .. versionadded:: 3.21
+ When the ``ALL_COMPONENTS`` option is given, the custom installation
+ script code will be executed for every component of a component-specific
+ installation. This option is mutually exclusive with the ``COMPONENT``
+ option.
+
+ .. versionadded:: 3.14
+ ``<file>`` or ``<code>`` may use "generator expressions" with the syntax
+ ``$<...>`` (in the case of ``<file>``, this refers to their use in the file
+ name, not the file's contents). See the
+ :manual:`cmake-generator-expressions(7)` manual for available expressions.
Installing Exports
^^^^^^^^^^^^^^^^^^
.. _`install(EXPORT)`:
-.. _EXPORT:
-
-.. code-block:: cmake
-
- install(EXPORT <export-name> DESTINATION <dir>
- [NAMESPACE <namespace>] [FILE <name>.cmake]
- [PERMISSIONS permissions...]
- [CONFIGURATIONS [Debug|Release|...]
- [CXX_MODULES_DIRECTORY <directory>]
- [EXPORT_LINK_INTERFACE_LIBRARIES]
- [COMPONENT <component>]
- [EXCLUDE_FROM_ALL])
- install(EXPORT_ANDROID_MK <export-name> DESTINATION <dir> [...])
-
-The ``EXPORT`` form generates and installs a CMake file containing code to
-import targets from the installation tree into another project.
-Target installations are associated with the export ``<export-name>``
-using the ``EXPORT`` option of the `install(TARGETS)`_ signature
-documented above. The ``NAMESPACE`` option will prepend ``<namespace>`` to
-the target names as they are written to the import file. By default
-the generated file will be called ``<export-name>.cmake`` but the ``FILE``
-option may be used to specify a different name. The value given to
-the ``FILE`` option must be a file name with the ``.cmake`` extension.
-If a ``CONFIGURATIONS`` option is given then the file will only be installed
-when one of the named configurations is installed. Additionally, the
-generated import file will reference only the matching target
-configurations. See the :variable:`CMAKE_MAP_IMPORTED_CONFIG_<CONFIG>`
-variable to map configurations of dependent projects to the installed
-configurations. The ``EXPORT_LINK_INTERFACE_LIBRARIES`` keyword, if
-present, causes the contents of the properties matching
-``(IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)?`` to be exported, when
-policy :policy:`CMP0022` is ``NEW``.
-.. note::
- The installed ``<export-name>.cmake`` file may come with additional
- per-configuration ``<export-name>-*.cmake`` files to be loaded by
- globbing. Do not use an export name that is the same as the package
- name in combination with installing a ``<package-name>-config.cmake``
- file or the latter may be incorrectly matched by the glob and loaded.
-
-When a ``COMPONENT`` option is given, the listed ``<component>`` implicitly
-depends on all components mentioned in the export set. The exported
-``<name>.cmake`` file will require each of the exported components to be
-present in order for dependent projects to build properly. For example, a
-project may define components ``Runtime`` and ``Development``, with shared
-libraries going into the ``Runtime`` component and static libraries and
-headers going into the ``Development`` component. The export set would also
-typically be part of the ``Development`` component, but it would export
-targets from both the ``Runtime`` and ``Development`` components. Therefore,
-the ``Runtime`` component would need to be installed if the ``Development``
-component was installed, but not vice versa. If the ``Development`` component
-was installed without the ``Runtime`` component, dependent projects that try
-to link against it would have build errors. Package managers, such as APT and
-RPM, typically handle this by listing the ``Runtime`` component as a dependency
-of the ``Development`` component in the package metadata, ensuring that the
-library is always installed if the headers and CMake export file are present.
-
-.. versionadded:: 3.7
- In addition to cmake language files, the ``EXPORT_ANDROID_MK`` mode may be
- used to specify an export to the android ndk build system. This mode
- accepts the same options as the normal export mode. The Android
- NDK supports the use of prebuilt libraries, both static and shared. This
- allows cmake to build the libraries of a project and make them available
- to an ndk build system complete with transitive dependencies, include flags
- and defines required to use the libraries.
-
-``CXX_MODULES_DIRECTORY``
-
- .. note ::
-
- Experimental. Gated by ``CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API``
-
- Specify a subdirectory to store C++ module information for targets in the
- export set. This directory will be populated with files which add the
- necessary target property information to the relevant targets. Note that
- without this information, none of the C++ modules which are part of the
- targets in the export set will support being imported in consuming targets.
-
-The ``EXPORT`` form is useful to help outside projects use targets built
-and installed by the current project. For example, the code
-
-.. code-block:: cmake
-
- install(TARGETS myexe EXPORT myproj DESTINATION bin)
- install(EXPORT myproj NAMESPACE mp_ DESTINATION lib/myproj)
- install(EXPORT_ANDROID_MK myproj DESTINATION share/ndk-modules)
-
-will install the executable ``myexe`` to ``<prefix>/bin`` and code to import
-it in the file ``<prefix>/lib/myproj/myproj.cmake`` and
-``<prefix>/share/ndk-modules/Android.mk``. An outside project
-may load this file with the include command and reference the ``myexe``
-executable from the installation tree using the imported target name
-``mp_myexe`` as if the target were built in its own tree.
+.. signature::
+ install(EXPORT <export-name> [...])
-.. note::
- This command supersedes the :command:`install_targets` command and
- the :prop_tgt:`PRE_INSTALL_SCRIPT` and :prop_tgt:`POST_INSTALL_SCRIPT`
- target properties. It also replaces the ``FILES`` forms of the
- :command:`install_files` and :command:`install_programs` commands.
- The processing order of these install rules relative to
- those generated by :command:`install_targets`,
- :command:`install_files`, and :command:`install_programs` commands
- is not defined.
+ Install a CMake file exporting targets for dependent projects:
+
+ .. code-block:: cmake
+
+ install(EXPORT <export-name> DESTINATION <dir>
+ [NAMESPACE <namespace>] [FILE <name>.cmake]
+ [PERMISSIONS permissions...]
+ [CONFIGURATIONS [Debug|Release|...]
+ [CXX_MODULES_DIRECTORY <directory>]
+ [EXPORT_LINK_INTERFACE_LIBRARIES]
+ [COMPONENT <component>]
+ [EXCLUDE_FROM_ALL])
+ install(EXPORT_ANDROID_MK <export-name> DESTINATION <dir> [...])
+
+ The ``EXPORT`` form generates and installs a CMake file containing code to
+ import targets from the installation tree into another project.
+ Target installations are associated with the export ``<export-name>``
+ using the ``EXPORT`` option of the `install(TARGETS)`_ signature
+ documented above. The ``NAMESPACE`` option will prepend ``<namespace>`` to
+ the target names as they are written to the import file. By default
+ the generated file will be called ``<export-name>.cmake`` but the ``FILE``
+ option may be used to specify a different name. The value given to
+ the ``FILE`` option must be a file name with the ``.cmake`` extension.
+ If a ``CONFIGURATIONS`` option is given then the file will only be installed
+ when one of the named configurations is installed. Additionally, the
+ generated import file will reference only the matching target
+ configurations. See the :variable:`CMAKE_MAP_IMPORTED_CONFIG_<CONFIG>`
+ variable to map configurations of dependent projects to the installed
+ configurations. The ``EXPORT_LINK_INTERFACE_LIBRARIES`` keyword, if
+ present, causes the contents of the properties matching
+ ``(IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)?`` to be exported, when
+ policy :policy:`CMP0022` is ``NEW``.
+
+ .. note::
+ The installed ``<export-name>.cmake`` file may come with additional
+ per-configuration ``<export-name>-*.cmake`` files to be loaded by
+ globbing. Do not use an export name that is the same as the package
+ name in combination with installing a ``<package-name>-config.cmake``
+ file or the latter may be incorrectly matched by the glob and loaded.
+
+ When a ``COMPONENT`` option is given, the listed ``<component>`` implicitly
+ depends on all components mentioned in the export set. The exported
+ ``<name>.cmake`` file will require each of the exported components to be
+ present in order for dependent projects to build properly. For example, a
+ project may define components ``Runtime`` and ``Development``, with shared
+ libraries going into the ``Runtime`` component and static libraries and
+ headers going into the ``Development`` component. The export set would also
+ typically be part of the ``Development`` component, but it would export
+ targets from both the ``Runtime`` and ``Development`` components. Therefore,
+ the ``Runtime`` component would need to be installed if the ``Development``
+ component was installed, but not vice versa. If the ``Development`` component
+ was installed without the ``Runtime`` component, dependent projects that try
+ to link against it would have build errors. Package managers, such as APT and
+ RPM, typically handle this by listing the ``Runtime`` component as a dependency
+ of the ``Development`` component in the package metadata, ensuring that the
+ library is always installed if the headers and CMake export file are present.
+
+ .. versionadded:: 3.7
+ In addition to cmake language files, the ``EXPORT_ANDROID_MK`` mode may be
+ used to specify an export to the android ndk build system. This mode
+ accepts the same options as the normal export mode. The Android
+ NDK supports the use of prebuilt libraries, both static and shared. This
+ allows cmake to build the libraries of a project and make them available
+ to an ndk build system complete with transitive dependencies, include flags
+ and defines required to use the libraries.
+
+ ``CXX_MODULES_DIRECTORY``
+
+ .. note ::
+
+ Experimental. Gated by ``CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API``
+
+ Specify a subdirectory to store C++ module information for targets in the
+ export set. This directory will be populated with files which add the
+ necessary target property information to the relevant targets. Note that
+ without this information, none of the C++ modules which are part of the
+ targets in the export set will support being imported in consuming targets.
+
+ The ``EXPORT`` form is useful to help outside projects use targets built
+ and installed by the current project. For example, the code
+
+ .. code-block:: cmake
+
+ install(TARGETS myexe EXPORT myproj DESTINATION bin)
+ install(EXPORT myproj NAMESPACE mp_ DESTINATION lib/myproj)
+ install(EXPORT_ANDROID_MK myproj DESTINATION share/ndk-modules)
+
+ will install the executable ``myexe`` to ``<prefix>/bin`` and code to import
+ it in the file ``<prefix>/lib/myproj/myproj.cmake`` and
+ ``<prefix>/share/ndk-modules/Android.mk``. An outside project
+ may load this file with the include command and reference the ``myexe``
+ executable from the installation tree using the imported target name
+ ``mp_myexe`` as if the target were built in its own tree.
+
+ .. note::
+ This command supersedes the :command:`install_targets` command and
+ the :prop_tgt:`PRE_INSTALL_SCRIPT` and :prop_tgt:`POST_INSTALL_SCRIPT`
+ target properties. It also replaces the ``FILES`` forms of the
+ :command:`install_files` and :command:`install_programs` commands.
+ The processing order of these install rules relative to
+ those generated by :command:`install_targets`,
+ :command:`install_files`, and :command:`install_programs` commands
+ is not defined.
Installing Runtime Dependencies
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. _`install(RUNTIME_DEPENDENCY_SET)`:
-.. _RUNTIME_DEPENDENCY_SET:
-
-.. versionadded:: 3.21
-
-.. code-block:: cmake
-
- install(RUNTIME_DEPENDENCY_SET <set-name>
- [[LIBRARY|RUNTIME|FRAMEWORK]
- [DESTINATION <dir>]
- [PERMISSIONS permissions...]
- [CONFIGURATIONS [Debug|Release|...]]
- [COMPONENT <component>]
- [NAMELINK_COMPONENT <component>]
- [OPTIONAL] [EXCLUDE_FROM_ALL]
- ] [...]
- [PRE_INCLUDE_REGEXES regexes...]
- [PRE_EXCLUDE_REGEXES regexes...]
- [POST_INCLUDE_REGEXES regexes...]
- [POST_EXCLUDE_REGEXES regexes...]
- [POST_INCLUDE_FILES files...]
- [POST_EXCLUDE_FILES files...]
- [DIRECTORIES directories...]
- )
-
-Installs a runtime dependency set previously created by one or more
-`install(TARGETS)`_ or `install(IMPORTED_RUNTIME_ARTIFACTS)`_ commands. The
-dependencies of targets belonging to a runtime dependency set are installed in
-the ``RUNTIME`` destination and component on DLL platforms, and in the
-``LIBRARY`` destination and component on non-DLL platforms. macOS frameworks
-are installed in the ``FRAMEWORK`` destination and component.
-Targets built within the build tree will never be installed as runtime
-dependencies, nor will their own dependencies, unless the targets themselves
-are installed with `install(TARGETS)`_.
-
-The generated install script calls :command:`file(GET_RUNTIME_DEPENDENCIES)`
-on the build-tree files to calculate the runtime dependencies. The build-tree
-executable files are passed as the ``EXECUTABLES`` argument, the build-tree
-shared libraries as the ``LIBRARIES`` argument, and the build-tree modules as
-the ``MODULES`` argument. On macOS, if one of the executables is a
-:prop_tgt:`MACOSX_BUNDLE`, that executable is passed as the
-``BUNDLE_EXECUTABLE`` argument. At most one such bundle executable may be in
-the runtime dependency set on macOS. The :prop_tgt:`MACOSX_BUNDLE` property
-has no effect on other platforms. Note that
-:command:`file(GET_RUNTIME_DEPENDENCIES)` only supports collecting the runtime
-dependencies for Windows, Linux and macOS platforms, so
-``install(RUNTIME_DEPENDENCY_SET)`` has the same limitation.
-
-The following sub-arguments are forwarded through as the corresponding
-arguments to :command:`file(GET_RUNTIME_DEPENDENCIES)` (for those that provide
-a non-empty list of directories, regular expressions or files). They all
-support :manual:`generator expressions <cmake-generator-expressions(7)>`.
-
-* ``DIRECTORIES <directories>``
-* ``PRE_INCLUDE_REGEXES <regexes>``
-* ``PRE_EXCLUDE_REGEXES <regexes>``
-* ``POST_INCLUDE_REGEXES <regexes>``
-* ``POST_EXCLUDE_REGEXES <regexes>``
-* ``POST_INCLUDE_FILES <files>``
-* ``POST_EXCLUDE_FILES <files>``
+
+.. signature::
+ install(RUNTIME_DEPENDENCY_SET <set-name> [...])
+
+ .. versionadded:: 3.21
+
+ Installs a runtime dependency set:
+
+ .. code-block:: cmake
+
+ install(RUNTIME_DEPENDENCY_SET <set-name>
+ [[LIBRARY|RUNTIME|FRAMEWORK]
+ [DESTINATION <dir>]
+ [PERMISSIONS permissions...]
+ [CONFIGURATIONS [Debug|Release|...]]
+ [COMPONENT <component>]
+ [NAMELINK_COMPONENT <component>]
+ [OPTIONAL] [EXCLUDE_FROM_ALL]
+ ] [...]
+ [PRE_INCLUDE_REGEXES regexes...]
+ [PRE_EXCLUDE_REGEXES regexes...]
+ [POST_INCLUDE_REGEXES regexes...]
+ [POST_EXCLUDE_REGEXES regexes...]
+ [POST_INCLUDE_FILES files...]
+ [POST_EXCLUDE_FILES files...]
+ [DIRECTORIES directories...]
+ )
+
+ Installs a runtime dependency set previously created by one or more
+ `install(TARGETS)`_ or `install(IMPORTED_RUNTIME_ARTIFACTS)`_ commands. The
+ dependencies of targets belonging to a runtime dependency set are installed in
+ the ``RUNTIME`` destination and component on DLL platforms, and in the
+ ``LIBRARY`` destination and component on non-DLL platforms. macOS frameworks
+ are installed in the ``FRAMEWORK`` destination and component.
+ Targets built within the build tree will never be installed as runtime
+ dependencies, nor will their own dependencies, unless the targets themselves
+ are installed with `install(TARGETS)`_.
+
+ The generated install script calls :command:`file(GET_RUNTIME_DEPENDENCIES)`
+ on the build-tree files to calculate the runtime dependencies. The build-tree
+ executable files are passed as the ``EXECUTABLES`` argument, the build-tree
+ shared libraries as the ``LIBRARIES`` argument, and the build-tree modules as
+ the ``MODULES`` argument. On macOS, if one of the executables is a
+ :prop_tgt:`MACOSX_BUNDLE`, that executable is passed as the
+ ``BUNDLE_EXECUTABLE`` argument. At most one such bundle executable may be in
+ the runtime dependency set on macOS. The :prop_tgt:`MACOSX_BUNDLE` property
+ has no effect on other platforms. Note that
+ :command:`file(GET_RUNTIME_DEPENDENCIES)` only supports collecting the runtime
+ dependencies for Windows, Linux and macOS platforms, so
+ ``install(RUNTIME_DEPENDENCY_SET)`` has the same limitation.
+
+ The following sub-arguments are forwarded through as the corresponding
+ arguments to :command:`file(GET_RUNTIME_DEPENDENCIES)` (for those that provide
+ a non-empty list of directories, regular expressions or files). They all
+ support :manual:`generator expressions <cmake-generator-expressions(7)>`.
+
+ * ``DIRECTORIES <directories>``
+ * ``PRE_INCLUDE_REGEXES <regexes>``
+ * ``PRE_EXCLUDE_REGEXES <regexes>``
+ * ``POST_INCLUDE_REGEXES <regexes>``
+ * ``POST_EXCLUDE_REGEXES <regexes>``
+ * ``POST_INCLUDE_FILES <files>``
+ * ``POST_EXCLUDE_FILES <files>``
Generated Installation Script
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^