| export |
| ------ |
| |
| 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: |
| |
| .. code-block:: cmake |
| |
| export(TARGETS <target>... [NAMESPACE <namespace>] |
| [APPEND] FILE <filename> [EXPORT_LINK_INTERFACE_LIBRARIES] |
| [CXX_MODULES_DIRECTORY <directory>]) |
| |
| Creates a file ``<filename>`` that may be included by outside projects to |
| 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. |
| |
| The file created by this command is specific to the build tree and |
| should never be installed. See the :command:`install(EXPORT)` command to |
| export targets from an install tree. |
| |
| The options are: |
| |
| ``NAMESPACE <namespace>`` |
| Prepend the ``<namespace>`` string to all target names written to the file. |
| |
| ``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. |
| |
| ``CXX_MODULES_DIRECTORY <directory>`` |
| |
| .. note :: |
| |
| Experimental. Gated by ``CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API`` |
| |
| Export C++ module properties to files under the given directory. Each file |
| will be named according to the target's export name (without any namespace). |
| These files will automatically be included from the export file. |
| |
| 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. |
| |
| .. 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. |
| |
| This command exports all :ref:`build configurations` from the build tree. |
| See the :variable:`CMAKE_MAP_IMPORTED_CONFIG_<CONFIG>` variable to map |
| configurations of dependent projects to the exported configurations. |
| |
| 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>] |
| [CXX_MODULES_DIRECTORY <directory>]) |
| |
| 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: |
| |
| .. code-block:: cmake |
| |
| export(PACKAGE <PackageName>) |
| |
| Store the current build directory in the CMake user package registry |
| for package ``<PackageName>``. The :command:`find_package` command may consider the |
| directory while searching for package ``<PackageName>``. This helps dependent |
| 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 |
| package configuration file (``<PackageName>Config.cmake``) that works with the |
| build tree. In some cases, for example for packaging and for system |
| wide installations, it is not desirable to write the user package |
| registry. |
| |
| .. 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. |