Cmake включает заголовок только цель из заголовка только цель - PullRequest
2 голосов
/ 05 марта 2019

Я пытаюсь настроить 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...