CMake:ExportInterface
From KitwarePublic
Revision as of 18:55, 6 June 2007 by Brad.king (talk | contribs) (→Export Interface for CMake Projects)
Export Interface for CMake Projects
This page documents a prototype design Alex and Brad created for exporting project information from a CMake project for use by outside projects.
The EXPORT command is used to export information from a project build tree:
EXPORT([export-name] [FILE somefile.cmake] [PREFIX someprefix-] [TARGETS <target>...] )
The EXPORT mode of the INSTALL command is used to export information from an install tree:
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 ...)
Here is an example for exporing a simple project from the build tree and install tree:
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- )
A more complicated project may be organized this way:
# 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 )
The generated export .cmake files will have content such as
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)