Мне нужно добавить зависимость только для компиляции во внешнюю библиотеку в файле CMake
Под "внешней" библиотекой я понимаю, что вы не имеете в видутот же проект - т.е. тот, который не настроен в рамках той же системы сборки CMake, что и цель, которую вы пытаетесь построить.
[...] Обычнозависимости добавляются с помощью target_link_libraries(my_exec the_lib)
, но это добавляет зависимость как во время компиляции, так и во время компоновки.
Ну нет, не обязательно.Как говорится в олове, это добавляет зависимость ссылки, которую вы можете рассматривать как параметр -l
.Насколько мне известно, он не генерирует никаких -I
опций для внешних библиотек или иным образом влияет на этап компиляции в отношении внешних библиотек.Точно так же, насколько мне известно, он распространяет транзитивные зависимости любого рода, только когда добавленная библиотека является другой целью, сконфигурированной и построенной той же системой сборки.То есть только для внутренних библиотек, а не для внешних.
Обратите внимание, target_include_directories
с чем-то вроде ${the_lib_SOURCE_DIR}
(или чем-то похожим на этот эффект) не будет работать для меня, потому что это не будетдобавить каталоги, необходимые для lib.Мне нужно что-то вроде ${the_lib_INCLUDE_DIRS}
, где the_lib_INCLUDE_DIRS
будет заполнено до -I
правил, требуемых the_lib
- но я не нашел ни одной переменной, которая бы соответствовала этому.
Я думаювы запрашиваете каталоги включения, которые были бы необходимы для успешного использования заголовков the_lib
, в ситуации, когда эти заголовки имеют свои собственные внешние зависимости.Существует причина, по которой вы не находите подходящую для этого переменную: не существует согласованного или стандартного способа получения этой информации для внешних библиотек.Доступные методы зависят от the_lib
.Они будут включать некоторые , но, вероятно, не все, из следующих:
- Используйте макрос CMake, предоставляемый с
the_lib
или с самим CMake, чтобы определитьпеременная CMake, передающая требуемую информацию. - Используйте
pkg-config
, чтобы прочитать информацию из записи pkg-config, связанной с the_lib
. - .строка Python
python-config
. - . Анализируйте заголовки
the_lib
, чтобы определить внешние пакеты, от которых они зависят, и выполняйте явный поиск по отдельности для заголовков этих пакетов. - Требуется пользовательуказать вручную для любых необходимых пакетов, которые не включены в путь по умолчанию.
В CMake нет магической переменной или функции для автоматического сбора такой информации, потому что, вообще говоря, она недоступна из *Сами заголовки 1056 *.Также обратите внимание, что большинство из них будут зависеть от включенных the_lib
зависимостей, устанавливаемых в определенных местах, ожидаемых во время сборки the_lib
.Это довольно сложно обеспечить.