cmake/Help/command/export.rst

139 lines
5.2 KiB
ReStructuredText
Raw Normal View History

2014-08-03 19:52:23 +02:00
export
------
2022-03-29 21:10:50 +02:00
Export targets or packages for outside projects to use them directly
from the current project's build tree, without installation.
See the :command:`install(EXPORT)` command to export targets from an
install tree.
Synopsis
^^^^^^^^
.. parsed-literal::
export(`TARGETS`_ <target>... [...])
export(`EXPORT`_ <export-name> [...])
export(`PACKAGE`_ <PackageName>)
Exporting Targets
^^^^^^^^^^^^^^^^^
.. _`export(TARGETS)`:
.. _TARGETS:
2014-08-03 19:52:23 +02:00
2019-11-11 23:01:05 +01:00
.. code-block:: cmake
2014-08-03 19:52:23 +02:00
2022-03-29 21:10:50 +02:00
export(TARGETS <target>... [NAMESPACE <namespace>]
[APPEND] FILE <filename> [EXPORT_LINK_INTERFACE_LIBRARIES])
2014-08-03 19:52:23 +02:00
2019-11-11 23:01:05 +01:00
Creates a file ``<filename>`` that may be included by outside projects to
2022-03-29 21:10:50 +02:00
import targets named by ``<target>...`` from the current project's build tree.
This is useful during cross-compiling to build utility executables that can
run on the host platform in one project and then import them into another
project being compiled for the target platform.
2014-08-03 19:52:23 +02:00
The file created by this command is specific to the build tree and
2015-11-17 17:22:37 +01:00
should never be installed. See the :command:`install(EXPORT)` command to
2022-03-29 21:10:50 +02:00
export targets from an install tree.
2014-08-03 19:52:23 +02:00
2022-03-29 21:10:50 +02:00
The options are:
2014-08-03 19:52:23 +02:00
2022-03-29 21:10:50 +02:00
``NAMESPACE <namespace>``
Prepend the ``<namespace>`` string to all target names written to the file.
2014-08-03 19:52:23 +02:00
2022-03-29 21:10:50 +02:00
``APPEND``
Append to the file instead of overwriting it. This can be used to
incrementally export multiple targets to the same file.
``EXPORT_LINK_INTERFACE_LIBRARIES``
Include the contents of the properties named with the pattern
``(IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)?``
in the export, even when policy :policy:`CMP0022` is NEW. This is useful
to support consumers using CMake versions older than 2.8.12.
2014-08-03 19:52:23 +02:00
2022-03-29 21:10:50 +02:00
This signature requires all targets to be listed explicitly. If a library
target is included in the export, but a target to which it links is not
included, the behavior is unspecified. See the `export(EXPORT)`_ signature
to automatically export the same targets from the build tree as
:command:`install(EXPORT)` would from an install tree.
2014-08-03 19:52:23 +02:00
2018-08-09 18:06:22 +02:00
.. note::
:ref:`Object Libraries` under :generator:`Xcode` have special handling if
multiple architectures are listed in :variable:`CMAKE_OSX_ARCHITECTURES`.
In this case they will be exported as :ref:`Interface Libraries` with
no object files available to clients. This is sufficient to satisfy
transitive usage requirements of other targets that link to the
object libraries in their implementation.
2022-03-29 21:10:50 +02:00
Exporting Targets to Android.mk
"""""""""""""""""""""""""""""""
.. code-block:: cmake
export(TARGETS <target>... ANDROID_MK <filename>)
.. versionadded:: 3.7
This signature exports cmake built targets to the android ndk build system
by creating an ``Android.mk`` file that references the prebuilt targets. 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. The signature takes a list of
targets and puts them in the ``Android.mk`` file specified by the
``<filename>`` given. This signature can only be used if policy
:policy:`CMP0022` is NEW for all targets given. A error will be issued if
that policy is set to OLD for one of the targets.
Exporting Targets matching install(EXPORT)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. _`export(EXPORT)`:
.. _EXPORT:
.. code-block:: cmake
export(EXPORT <export-name> [NAMESPACE <namespace>] [FILE <filename>])
Creates a file ``<filename>`` that may be included by outside projects to
import targets from the current project's build tree. This is the same
as the `export(TARGETS)`_ signature, except that the targets are not
explicitly listed. Instead, it exports the targets associated with
the installation export ``<export-name>``. Target installations may be
associated with the export ``<export-name>`` using the ``EXPORT`` option
of the :command:`install(TARGETS)` command.
Exporting Packages
^^^^^^^^^^^^^^^^^^
.. _`export(PACKAGE)`:
.. _PACKAGE:
2019-11-11 23:01:05 +01:00
.. code-block:: cmake
2014-08-03 19:52:23 +02:00
2018-10-28 12:09:07 +01:00
export(PACKAGE <PackageName>)
2014-08-03 19:52:23 +02:00
Store the current build directory in the CMake user package registry
2019-11-11 23:01:05 +01:00
for package ``<PackageName>``. The :command:`find_package` command may consider the
2018-10-28 12:09:07 +01:00
directory while searching for package ``<PackageName>``. This helps dependent
2014-08-03 19:52:23 +02:00
projects find and use a package from the current project's build tree
without help from the user. Note that the entry in the package
registry that this command creates works only in conjunction with a
2018-10-28 12:09:07 +01:00
package configuration file (``<PackageName>Config.cmake``) that works with the
2015-04-27 22:25:09 +02:00
build tree. In some cases, for example for packaging and for system
wide installations, it is not desirable to write the user package
2019-11-11 23:01:05 +01:00
registry.
2016-10-30 18:24:19 +01:00
2021-09-14 00:13:48 +02:00
.. versionchanged:: 3.1
If the :variable:`CMAKE_EXPORT_NO_PACKAGE_REGISTRY` variable
is enabled, the ``export(PACKAGE)`` command will do nothing.
.. versionchanged:: 3.15
By default the ``export(PACKAGE)`` command does nothing (see policy
:policy:`CMP0090`) because populating the user package registry has effects
outside the source and build trees. Set the
:variable:`CMAKE_EXPORT_PACKAGE_REGISTRY` variable to add build directories
to the CMake user package registry.