Я пытаюсь настроить cmake, чтобы у меня была библиотека только для заголовков, которая зависит от другой библиотеки только для заголовков.Моя структура каталогов выглядит следующим образом.
library_a
|_a.hpp
library_b
|_b.hpp
library_c
|_c.hpp
|_c.cpp
У меня есть CMakeLists.txt
настройки, как указано ниже
Корень каталога:
add_subdirectory (library_a)
add_subdirectory (library_b)
add_subdirectory (library_c)
library_a
каталог
add_library(target_a INTERFACE)
target_sources(target_a INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/a.hpp>)
target_include_directories(target_a INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
library_b
каталог
add_library(target_b INTERFACE)
target_sources(target_b INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/b.hpp>)
target_include_directories(target_b INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
target_link_library(target_b INTERFACE target_a)
library_c
каталог
add_library(target_c STATIC)
target_sources(korc_node_context
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/c.cpp>
INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/c.hpp>)
target_include_directories(target_c INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
target_link_libraries(target_c INTERFACE target_b)
Target library_a
предназначен для использования в качестве общего интерфейса для реализации library_b
.Со временем будет больше реализаций.Поэтому в c.hpp
я включаю заголовок a.hpp
и использую b.hpp
в реализации c.cpp
.Все настраивается нормально, но когда я иду на компиляцию, я получаю сообщение об ошибке, что файл a.hpp
не может быть найден.Как я могу получить target_link_libraries(target_c INTERFACE target_b)
, чтобы включить заголовки из target_a
?