#c #cmake
#c #cmake
Вопрос:
Как мне загрузить INTERFACE_INCLUDE_DIRECTORIES основного приложения в целевую библиотеку (плагин)? Я знаю, как загрузить INTERFACE_INCLUDE_DIRECTORIES библиотеки, но я не знаю, как загрузить их, не связывая библиотеку.
├── app
├── pluga
└── plugb
Комментарии:
1. Связывание — единственный способ автоматического распространения свойств от одной цели к другой. Вы можете создать библиотеку только для заголовков (
add_library(... INTERFACE)
), установить ее свойство INTERFACE_INCLUDE_DIRECTORIES и связать с ней как приложение, так и плагины.
Ответ №1:
target_include_directories()
Команда INTERFACE_INCLUDE_DIRECTORIES
заполняется значениями, заданными PUBLIC
INTERFACE
ключевым словам and .
Цели могут заполнить это свойство, чтобы опубликовать включаемые каталоги, необходимые для компиляции с заголовками для цели. Целевые объекты-потребители могут добавлять записи в свое собственное INCLUDE_DIRECTORIES
свойство, например, $<TARGET_PROPERTY:foo,INTERFACE_INCLUDE_DIRECTORIES>
для использования каталогов include, указанных в интерфейсе foo .
Итак, ответ заключается в использовании:
target_include_directories(pluga INTERFACE
$<TARGET_PROPERTY:app,INTERFACE_INCLUDE_DIRECTORIES>
)
Из документации.