Я успешно использовал target_include_directories()
для передачи требований использования зависимым библиотекам C ++.Все работает очень хорошо.Но здесь есть немного другой вариант использования.
Есть ли способ иметь второй набор включаемых каталогов в дополнение к обычному (то есть, для заголовков C / C ++)?
Это может быть удобно, если, например, у вас есть библиотеки C ++, которые сгенерированы из языка схемы (например, Protobuf, Capnproto) с add_custom_command()
.Файлы схемы могут ссылаться друг на друга import
, поэтому я хотел бы установить файлы схемы вместе с библиотеками.
Было бы неплохо передать информацию зависимым библиотекам о каталогах файлов схемы.в качестве каталогов для заголовков C ++.
Использование target_include_directories()
для отслеживания каталогов, не содержащих заголовки C / C ++, может быть неправильным использованием этой команды.Но, может быть, есть какой-то другой способ добиться этого?
Edit 1 :
Просто пояснение: моя цель - иметь два набора путей к каталогам, один дляC ++ включает заголовки и еще один для файлов схемы.(Файлы схемы и заголовки C ++ могут не находиться в одинаковых каталогах).Свойство INTERFACE_INCLUDE_DIRECTORIES
будет обрабатывать заголовки C ++, но как мне обрабатывать файлы схемы?
yet_to_be_written_ADD_CAPNP_TARGET(
NAME target1
SCHEMA ${CMAKE_CURRENT_SOURCE_DIR}/a1.capnp
)
yet_to_be_written_ADD_CAPNP_TARGET(
NAME target2
SCHEMA ${CMAKE_CURRENT_SOURCE_DIR}/a2.capnp
DEPENDENCIES target1
)
Обходное решение может позволить yet_to_be_written_ADD_CAPNP_TARGET()
создать две библиотеки
add_library(${name}_cxx)
add_library(${name}_schema INTERFACE)
вместо одной библиотеки, потому что тогда у меня будет два INTERFACE_INCLUDE_DIRECTORIES
, которые могут запомнить пути к каталогам.Целью ${name}_schema
было бы просто запомнить пути к каталогам схемы.Позже они могут быть получены с помощью выражения генератора $<TARGET_PROPERTY:target2_schema,INTERFACE_INCLUDE_DIRECTORIES>
и переданы компилятору схемы (/usr/bin/capnp
) в виде add_custom_command()
Конечно, этоВсе упражнение довольно бессмысленно, если все файлы схемы доступны в дереве исходного кода данного программного проекта, но я думаю о сценарии, когда цели cmake были бы импортированы из различных внешних программных проектов.Файлы схемы могут быть установлены в разных каталогах.
Другим обходным решением может быть непосредственное указание путей к каталогам внешних схем (без использования целей для передачи этой информации).