export.rst 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. export
  2. ------
  3. Export targets or packages for outside projects to use them directly
  4. from the current project's build tree, without installation.
  5. See the :command:`install(EXPORT)` command to export targets from an
  6. install tree.
  7. Synopsis
  8. ^^^^^^^^
  9. .. parsed-literal::
  10. export(`TARGETS`_ <target>... [...])
  11. export(`EXPORT`_ <export-name> [...])
  12. export(`PACKAGE`_ <PackageName>)
  13. Exporting Targets
  14. ^^^^^^^^^^^^^^^^^
  15. .. _`export(TARGETS)`:
  16. .. _TARGETS:
  17. .. code-block:: cmake
  18. export(TARGETS <target>... [NAMESPACE <namespace>]
  19. [APPEND] FILE <filename> [EXPORT_LINK_INTERFACE_LIBRARIES])
  20. Creates a file ``<filename>`` that may be included by outside projects to
  21. import targets named by ``<target>...`` from the current project's build tree.
  22. This is useful during cross-compiling to build utility executables that can
  23. run on the host platform in one project and then import them into another
  24. project being compiled for the target platform.
  25. The file created by this command is specific to the build tree and
  26. should never be installed. See the :command:`install(EXPORT)` command to
  27. export targets from an install tree.
  28. The options are:
  29. ``NAMESPACE <namespace>``
  30. Prepend the ``<namespace>`` string to all target names written to the file.
  31. ``APPEND``
  32. Append to the file instead of overwriting it. This can be used to
  33. incrementally export multiple targets to the same file.
  34. ``EXPORT_LINK_INTERFACE_LIBRARIES``
  35. Include the contents of the properties named with the pattern
  36. ``(IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)?``
  37. in the export, even when policy :policy:`CMP0022` is NEW. This is useful
  38. to support consumers using CMake versions older than 2.8.12.
  39. This signature requires all targets to be listed explicitly. If a library
  40. target is included in the export, but a target to which it links is not
  41. included, the behavior is unspecified. See the `export(EXPORT)`_ signature
  42. to automatically export the same targets from the build tree as
  43. :command:`install(EXPORT)` would from an install tree.
  44. .. note::
  45. :ref:`Object Libraries` under :generator:`Xcode` have special handling if
  46. multiple architectures are listed in :variable:`CMAKE_OSX_ARCHITECTURES`.
  47. In this case they will be exported as :ref:`Interface Libraries` with
  48. no object files available to clients. This is sufficient to satisfy
  49. transitive usage requirements of other targets that link to the
  50. object libraries in their implementation.
  51. Exporting Targets to Android.mk
  52. """""""""""""""""""""""""""""""
  53. .. code-block:: cmake
  54. export(TARGETS <target>... ANDROID_MK <filename>)
  55. .. versionadded:: 3.7
  56. This signature exports cmake built targets to the android ndk build system
  57. by creating an ``Android.mk`` file that references the prebuilt targets. The
  58. Android NDK supports the use of prebuilt libraries, both static and shared.
  59. This allows cmake to build the libraries of a project and make them available
  60. to an ndk build system complete with transitive dependencies, include flags
  61. and defines required to use the libraries. The signature takes a list of
  62. targets and puts them in the ``Android.mk`` file specified by the
  63. ``<filename>`` given. This signature can only be used if policy
  64. :policy:`CMP0022` is NEW for all targets given. A error will be issued if
  65. that policy is set to OLD for one of the targets.
  66. Exporting Targets matching install(EXPORT)
  67. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  68. .. _`export(EXPORT)`:
  69. .. _EXPORT:
  70. .. code-block:: cmake
  71. export(EXPORT <export-name> [NAMESPACE <namespace>] [FILE <filename>])
  72. Creates a file ``<filename>`` that may be included by outside projects to
  73. import targets from the current project's build tree. This is the same
  74. as the `export(TARGETS)`_ signature, except that the targets are not
  75. explicitly listed. Instead, it exports the targets associated with
  76. the installation export ``<export-name>``. Target installations may be
  77. associated with the export ``<export-name>`` using the ``EXPORT`` option
  78. of the :command:`install(TARGETS)` command.
  79. Exporting Packages
  80. ^^^^^^^^^^^^^^^^^^
  81. .. _`export(PACKAGE)`:
  82. .. _PACKAGE:
  83. .. code-block:: cmake
  84. export(PACKAGE <PackageName>)
  85. Store the current build directory in the CMake user package registry
  86. for package ``<PackageName>``. The :command:`find_package` command may consider the
  87. directory while searching for package ``<PackageName>``. This helps dependent
  88. projects find and use a package from the current project's build tree
  89. without help from the user. Note that the entry in the package
  90. registry that this command creates works only in conjunction with a
  91. package configuration file (``<PackageName>Config.cmake``) that works with the
  92. build tree. In some cases, for example for packaging and for system
  93. wide installations, it is not desirable to write the user package
  94. registry.
  95. .. versionchanged:: 3.1
  96. If the :variable:`CMAKE_EXPORT_NO_PACKAGE_REGISTRY` variable
  97. is enabled, the ``export(PACKAGE)`` command will do nothing.
  98. .. versionchanged:: 3.15
  99. By default the ``export(PACKAGE)`` command does nothing (see policy
  100. :policy:`CMP0090`) because populating the user package registry has effects
  101. outside the source and build trees. Set the
  102. :variable:`CMAKE_EXPORT_PACKAGE_REGISTRY` variable to add build directories
  103. to the CMake user package registry.