Browse Source

Help: Use signature directive for 'install' command

Replace manual anchors with signature directives.  Indent each
signature's documentation inside its directive.
Brad King 2 years ago
parent
commit
7a54bdf0c1
1 changed files with 820 additions and 792 deletions
  1. 820 792
      Help/command/install.rst

+ 820 - 792
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
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^