Hi Craig,
thanks for the detailed explanation !
On 2019-09-29 5:13 a.m., Craig Scott wrote:
If all of your headers should be installed to a single directory, then
you can list the headers in the target's PUBLIC_HEADER or
PRIVATE_HEADER target property, then make sure you add those
destinations in the install(TARGETS ...) command. For example:
include(GNUInstallDirs)
install(TARGETS myLib
EXPORT SomeProj_Targets
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
COMPONENT SomeProj_Runtime
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
COMPONENT SomeProj_Runtime
NAMELINK_COMPONENT SomeProj_Development # Requires CMake 3.12
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
COMPONENT SomeProj_Development
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
COMPONENT SomeProj_Development
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
I hadn't noticed one can have multiple 'COMPONENT' sections in a single
`install` call. The CMake documentation could be a bit more clear about
that.
If you need to install headers into more than one directory (i.e. your
headers have some sort of directory hierarchy), then the above doesn't
work because it flattens all of the headers into a single location.
Instead, you have to use install(FILES ...) to install the headers
directly for such cases. Also, the
target_include_directories() command has nothing to do with what
header files get installed. Rather, it only controls the header search
paths attached to a target.
Right, true.
FYI, part of my CppCon talk "Deep CMake For Library Authors" from a
couple of weeks ago has a fair amount of overlap with this topic
(specifically install components and destinations). I'm waiting for
the YouTube clip to be made available and then I'll be posting a blog
article on my website with links and the slides. When it goes up,
you'll be able to find it at https://crascit.com (hopefully sometime
this week, but depends how quickly the production people get the video
done).
Great, looking forward to reading the slides.
Many thanks !
Stefan
--
...ich hab' noch einen Koffer in Berlin...
--
Powered by www.kitware.com
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Kitware offers various services to support the CMake community. For more
information on each offering, please visit:
CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake