Включить заголовок каталога автоматически Automake - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть проект Automake, который имеет следующую структуру каталогов:

Makefile.am
src/
src/common
src/common/common.c
src/common/common.h
src/common/Makefile.am
src/mylib
src/mylib/mylib.c
src/mylib/mylib.h
src/mylib/Makefile.am

На src/common/Makefile.am есть цель библиотеки удобства Libtool:

noinst_LTLIBRARIES = libcommon.la
libcommon_la_SOURCES = common.c common.h

На src/mylib/Makefile.am есть цель публичной общей библиотеки Libtool:

lib_LTLIBRARIES = libmylib.la
libmylib_la_SOURCES = mylib.c mylib.h
libmylib_la_LIBADD = ../common/libcommon.la

Теперь я ожидал, что Automake будет достаточно умным, чтобы автоматически добавить к libmylib_la_CFLAGS -I, указывающему на каталог, где находится common.h, поскольку он зависит от libcommon.la.

Есть ли на самом деле механизм для включения этого (аналогично INTERFACE_INCLUDE_DIRECTORIES в CMake) или, может быть, переменная (например, libcommon_la_HEADERS), которая уже содержит все заголовки, принадлежащие удобной библиотеке libcommon?

Я исследовал всюду и не мог найти путь к нему вместо добавления -I ../common/ непосредственно к mylib CFLAGS.

1 Ответ

0 голосов
/ 18 сентября 2018

Теперь я ожидал, что Automake будет достаточно умным, чтобы автоматически добавлять в libmylib_la_CFLAGS -I указывает на каталог, где находится common.h, так как это зависит от libcommon.la.

Как вы обнаружили, Automake не делает этого автоматически.

Есть ли на самом деле механизм, чтобы включить это (похоже на INTERFACE_INCLUDE_DIRECTORIES CMake или, возможно, переменная (например, libcommon_la_HEADERS), которая уже содержит все заголовки, принадлежащие удобная библиотека libcommon?

Просто выписать переменную - единственный механизм. Если вам придется делать это много раз, вы можете использовать включаемый файл или использовать AC_SUBST в вашем configure.ac.

Обратите внимание, что в Automake обычно можно поместить опции -I в одну из _CPPFLAGS переменных. И, в зависимости от того, что делает ваша библиотека - в частности, если она генерирует какие-либо заголовочные файлы - вы можете также захотеть, чтобы она ссылалась как на исходный код, так и на деревья компоновки. Таким образом, результат может выглядеть следующим образом:

libmylib_la_CPPFLAGS = -I$(srcdir)/../common -I../common
...