This is an old question, but I had exactly the same problem. I ended up getting around this by adding the export_headers() function that creates symbolic links to the headers in binary export_headers() :
function(export_headers TARGET HEADER_SOURCE_DIR HEADER_DEST_DIR) # Put all headers that are in the source directory into EXPORT_HEADERS variable file(GLOB_RECURSE EXPORT_HEADERS CONFIGURE_DEPENDS RELATIVE "${HEADER_SOURCE_DIR}" "${HEADER_SOURCE_DIR}/*.h" ) # For each header that will be exported foreach(HEADER ${EXPORT_HEADERS}) # Get the directory portion that needs to be created get_filename_component(HEADER_DIRECTORY "${HEADER}" DIRECTORY) # Create the directory add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "${HEADER_DEST_DIR}/${HEADER_DIRECTORY}" ) if (MSVC) # Make a hard link to the file add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND if not exist "${HEADER_DEST_DIR}/${HEADER}" \( mklink /h "${HEADER_DEST_DIR}/${HEADER}" "${HEADER_SOURCE_DIR}/${HEADER}" \) ) else() # Make a symbolic link to the file add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ln -sf "${HEADER_SOURCE_DIR}/${HEADER}" "${HEADER_DEST_DIR}/${HEADER}" ) endif() endforeach(HEADER) endfunction()
You would call it something like:
add_library(libA STATIC ${LIBA_SOURCES} export_headers(libA ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/include/libA) target_include_directories(libA INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/include)
Then, if you follow the link to libA , you can #include <libA/foo.h> .
source share