|
|
(12 intermediate revisions by 8 users not shown) |
Line 1: |
Line 1: |
| =Export Interface for CMake Projects=
| | {{CMake/Template/Moved}} |
|
| |
|
| This page documents a prototype design Alex and Brad created for exporting project information from a CMake project for use by outside projects. | | This page has moved [https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/ExportInterface here]. |
| | |
| The EXPORT command is used to export information from a project build tree:
| |
| <pre>
| |
| EXPORT([export-name]
| |
| [FILE somefile.cmake]
| |
| [PREFIX someprefix-]
| |
| [TARGETS <target>...]
| |
| )
| |
| </pre>
| |
| | |
| The EXPORT mode of the INSTALL command is used to export information from an install tree:
| |
| <pre>
| |
| INSTALL(
| |
| EXPORT <export-name>
| |
| DESTINATION lib/myproj-1.2
| |
| FILE <file-for-install>.cmake
| |
| [PREFIX someprefix-]
| |
| )
| |
| INSTALL(
| |
| TARGETS ...
| |
| EXPORT <export-name> # attach these installed targest to the named export
| |
| ...)
| |
| </pre>
| |
| | |
| Here is an example for exporing a simple project from the build tree and install tree:
| |
| | |
| <pre>
| |
| EXPORT( # anonymous export must be fully specified here
| |
| FILE myproj-build.cmake
| |
| PREFIX myproj-1.2-
| |
| TARGETS mylibA mylibB mygen
| |
| )
| |
| INSTALL(
| |
| TARGETS mylibA mylibB mygen
| |
| EXPORT myproj-install
| |
| RUNTIME DESTINATION bin
| |
| ARCHIVE DESTINATION lib
| |
| LIBRARY DESTINATION lib
| |
| )
| |
| INSTALL(
| |
| EXPORT myproj-install
| |
| DESTINATION lib/myproj-1.2
| |
| FILE myproj-install.cmake
| |
| PREFIX myproj-1.2-
| |
| )
| |
| </pre>
| |
| | |
| A more complicated project may be organized this way:
| |
| | |
| <pre>
| |
| # CMakeLists.txt
| |
| EXPORT(myproj-build # named export allows more rules later
| |
| FILE myproj-build.cmake
| |
| PREFIX myproj-1.2-
| |
| )
| |
| INSTALL(
| |
| EXPORT myproj-install
| |
| DESTINATION lib/myproj-1.2
| |
| FILE myproj-install.cmake
| |
| PREFIX myproj-1.2-
| |
| )
| |
| | |
| # lib/CMakeLists.txt
| |
| EXPORT(myproj-build
| |
| TARGETS mylibA mylibB
| |
| )
| |
| INSTALL(TARGETS mylibA mylibB
| |
| EXPORT myproj-install
| |
| RUNTIME DESTINATION bin
| |
| ARCHIVE DESTINATION lib
| |
| LIBRARY DESTINATION lib
| |
| )
| |
| | |
| # exe/CMakeLists.txt
| |
| EXPORT(myproj-build
| |
| TARGETS mygen
| |
| )
| |
| INSTALL(TARGETS mygen
| |
| EXPORT myproj-install
| |
| DESTINATION bin
| |
| )
| |
| </pre>
| |
| | |
| The generated export .cmake files will have content such as
| |
| | |
| <pre>
| |
| add_library(myproj-1.2-mylibA IMPORT)
| |
| set_target_properties(mylibA PROPERTIES
| |
| LOCATION /path/to/libmylibA.a)
| |
| | |
| add_library(myproj-1.2-mylibB IMPORT)
| |
| set_target_properties(mylibB PROPERTIES
| |
| LOCATION /path/to/libmylibB.a
| |
| INTERFACE_LIBRARIES myproj-1.2-mylibA
| |
| )
| |
| | |
| add_executable(myproj-1.2-mygen IMPORT)
| |
| set_target_properties(mylibB PROPERTIES
| |
| LOCATION /path/to/mygen)
| |
| </pre>
| |