4 Export targets or packages for outside projects to use them directly
5 from the current project's build tree, without installation.
7 See the :command:`install(EXPORT)` command to export targets from an
15 export(`TARGETS`_ <target>... [...])
16 export(`EXPORT`_ <export-name> [...])
17 export(`PACKAGE`_ <PackageName>)
22 .. _`export(TARGETS)`:
27 export(TARGETS <target>... [NAMESPACE <namespace>]
28 [APPEND] FILE <filename> [EXPORT_LINK_INTERFACE_LIBRARIES]
29 [CXX_MODULES_DIRECTORY <directory>])
31 Creates a file ``<filename>`` that may be included by outside projects to
32 import targets named by ``<target>...`` from the current project's build tree.
33 This is useful during cross-compiling to build utility executables that can
34 run on the host platform in one project and then import them into another
35 project being compiled for the target platform.
37 The file created by this command is specific to the build tree and
38 should never be installed. See the :command:`install(EXPORT)` command to
39 export targets from an install tree.
43 ``NAMESPACE <namespace>``
44 Prepend the ``<namespace>`` string to all target names written to the file.
47 Append to the file instead of overwriting it. This can be used to
48 incrementally export multiple targets to the same file.
50 ``EXPORT_LINK_INTERFACE_LIBRARIES``
51 Include the contents of the properties named with the pattern
52 ``(IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)?``
53 in the export, even when policy :policy:`CMP0022` is NEW. This is useful
54 to support consumers using CMake versions older than 2.8.12.
56 ``CXX_MODULES_DIRECTORY <directory>``
60 Experimental. Gated by ``CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API``
62 Export C++ module properties to files under the given directory. Each file
63 will be named according to the target's export name (without any namespace).
64 These files will automatically be included from the export file.
66 This signature requires all targets to be listed explicitly. If a library
67 target is included in the export, but a target to which it links is not
68 included, the behavior is unspecified. See the `export(EXPORT)`_ signature
69 to automatically export the same targets from the build tree as
70 :command:`install(EXPORT)` would from an install tree.
74 :ref:`Object Libraries` under :generator:`Xcode` have special handling if
75 multiple architectures are listed in :variable:`CMAKE_OSX_ARCHITECTURES`.
76 In this case they will be exported as :ref:`Interface Libraries` with
77 no object files available to clients. This is sufficient to satisfy
78 transitive usage requirements of other targets that link to the
79 object libraries in their implementation.
81 Exporting Targets to Android.mk
82 """""""""""""""""""""""""""""""
86 export(TARGETS <target>... ANDROID_MK <filename>)
90 This signature exports cmake built targets to the android ndk build system
91 by creating an ``Android.mk`` file that references the prebuilt targets. The
92 Android NDK supports the use of prebuilt libraries, both static and shared.
93 This allows cmake to build the libraries of a project and make them available
94 to an ndk build system complete with transitive dependencies, include flags
95 and defines required to use the libraries. The signature takes a list of
96 targets and puts them in the ``Android.mk`` file specified by the
97 ``<filename>`` given. This signature can only be used if policy
98 :policy:`CMP0022` is NEW for all targets given. A error will be issued if
99 that policy is set to OLD for one of the targets.
101 Exporting Targets matching install(EXPORT)
102 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
104 .. _`export(EXPORT)`:
107 .. code-block:: cmake
109 export(EXPORT <export-name> [NAMESPACE <namespace>] [FILE <filename>]
110 [CXX_MODULES_DIRECTORY <directory>])
112 Creates a file ``<filename>`` that may be included by outside projects to
113 import targets from the current project's build tree. This is the same
114 as the `export(TARGETS)`_ signature, except that the targets are not
115 explicitly listed. Instead, it exports the targets associated with
116 the installation export ``<export-name>``. Target installations may be
117 associated with the export ``<export-name>`` using the ``EXPORT`` option
118 of the :command:`install(TARGETS)` command.
123 .. _`export(PACKAGE)`:
126 .. code-block:: cmake
128 export(PACKAGE <PackageName>)
130 Store the current build directory in the CMake user package registry
131 for package ``<PackageName>``. The :command:`find_package` command may consider the
132 directory while searching for package ``<PackageName>``. This helps dependent
133 projects find and use a package from the current project's build tree
134 without help from the user. Note that the entry in the package
135 registry that this command creates works only in conjunction with a
136 package configuration file (``<PackageName>Config.cmake``) that works with the
137 build tree. In some cases, for example for packaging and for system
138 wide installations, it is not desirable to write the user package
141 .. versionchanged:: 3.1
142 If the :variable:`CMAKE_EXPORT_NO_PACKAGE_REGISTRY` variable
143 is enabled, the ``export(PACKAGE)`` command will do nothing.
145 .. versionchanged:: 3.15
146 By default the ``export(PACKAGE)`` command does nothing (see policy
147 :policy:`CMP0090`) because populating the user package registry has effects
148 outside the source and build trees. Set the
149 :variable:`CMAKE_EXPORT_PACKAGE_REGISTRY` variable to add build directories
150 to the CMake user package registry.