I am exporting/installing a header-only INTERFACE library and I run into difficulty with target_sources() because I can't use relative paths to the files. So I do this:
set(project_name fubar) set(source_files myfile.h ) # Include dir for installed targets set(INCLUDE_DIR include/${project_name}-${upstream_version}) foreach(source_file ${source_files}) get_filename_component(abs_source_file ${source_file} ABSOLUTE) list(APPEND absolute_source_files $<BUILD_INTERFACE:${abs_source_file}> $<INSTALL_INTERFACE:${INCLUDE_DIR}/${source_file}> ) endforeach() add_library(${project_name} INTERFACE) target_sources(${project_name} INTERFACE ${absolute_source_files}) Without the separate generator expressions for BUILD_INTERFACE and INSTALL_INTERFACE, CMake complains that absolute paths are not inside INSTALL_PREFIX in my install() command later: CMake Error in CMakeLists.txt: Target "better-enums" INTERFACE_SOURCES property contains path: "C:/code/fubar/myfile.h" which is prefixed in the source directory. Corresponding install() command is: install(TARGETS ${project_name} EXPORT ${project_name}-targets INCLUDES DESTINATION ${INCLUDE_DIR} ) export(EXPORT ${project_name}-targets FILE ${CMAKE_CURRENT_BINARY_DIR}/${project_name}-targets.cmake ) install(EXPORT ${project_name}-targets FILE ${project_name}-targets.cmake DESTINATION ${package_config_dir} ) For INTERFACE_INCLUDE_DIRECTORIES, this same problem exists except CMake provides a convenience toggle called INTERFACE_SYSTEM_INCLUDE_DIRECTORIES. Is there a similar convenience for interface sources? Or maybe I'm going about this all the wrong way? Honestly the only reason interface sources are specified is because I have a header-only library and I want that header to show up in only MY targets during development so I can edit those header files through my IDE. I do not expect the header files to appear in targets that simply import my target as a dependency. So it's possible I'm going about this the wrong way. Advice is greatly appreciated. -- 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: http://public.kitware.com/mailman/listinfo/cmake