How to have CMake show headers-that are not part of any binary target-in the IDE?
Several months down the line, I did not find a way to directly list the header files for an INTERFACE
library.
Since the question still has some views, here is what I ended up doing (i.e. what appears like the lesser hack currently available).
Imagine module A is a header only library. In the CMakeLists.txt declaring its target:
# Define 'modA_headers' variable to list all the header filesset(modA_headers utility.h moreUtilities.h ...)add_library(moduleA INTERFACE) # 'moduleA' is an INTERFACE pseudo target## From here, the target 'moduleA' can be customised#target_include_directories(moduleA ...) # Transitively forwardedinstall(TARGETS moduleA ...)## HACK: have the files showing in the IDE, under the name 'moduleA_ide'#add_custom_target(moduleA_ide SOURCES ${modA_headers})
I do not accept this answer, since I expect further releases of CMake to offer a more semantically correct approach, which will then be accepted : )
You can use the new target_sources
command in CMake 3.1.
add_library(moduleA INTERFACE)target_include_directories(moduleA INTERFACE ...)target_sources(moduleA INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/utility.h ${CMAKE_CURRENT_SOURCE_DIR}/moreUtilities.h)
It is also transitive.
http://www.cmake.org/cmake/help/v3.1/command/target_sources.html#command:target_sources
The limitation of not being able to export targets which have INTERFACE_SOURCES has been lifted for CMake 3.3.