Включить (только заголовок) библиотеку в проект автоинструментов - PullRequest
2 голосов
/ 30 ноября 2010

Я хочу интегрировать библиотеку C ++ только для заголовков в мой проект Autotools. Поскольку библиотека использует Autoconf и Automake, я использую AC_CONFIG_SUBDIRS в configure.ac и добавляю dir библиотеки в строку SUBDIRS = в Makefile.am.

Мой вопрос: как я могу предотвратить установку библиотеки заголовков с помощью make install? Я создаю один двоичный файл, поэтому моим пользователям эти заголовки не нужны.

Я бы предпочел не вмешиваться в библиотеку, поэтому я могу получить обновление, просто распаковав новую версию.

Ответы [ 3 ]

2 голосов
/ 02 декабря 2010

Вот идея.

Переместите все сторонние библиотеки, которые вы не хотите видеть установленными, в подкаталог с именем noinst/. Так, например, если вы хотите отправить свой проект с чем-то вроде Boost, распакуйте его в каталог noinst/boost/. Используйте AC_CONFIG_SUBDIRS([noinst/boost]). Внутри noinst/Makefile.am сделайте что-то вроде этого:

SUBDIRS = boost
# Override Automake's installation targets with the command ":" that does nothing.
install:; @:
install-exec:; @:
install-data:; @:
uninstall:; @:

В результате, когда некоторые из рекурсивных команд «make install *» или «make uninstall» запускаются из каталога верхнего уровня, рекурсия останавливается в noinst/ и не посещает его подкаталоги. Другие рекурсивные команды (такие как «make», «make clean» или «make dist») все равно будут повторяться в подкаталогах.

Конечно, вы можете переопределить install: и друзей непосредственно в стороннем пакете и избежать лишнего каталога noinst/. Но если вы похожи на меня, вы не хотите вмешиваться в сторонние пакеты, чтобы облегчить их обновление. Также приятным свойством вышеуказанной настройки является то, что если кто-то зайдет в noinst/boost/ и решит запустить make install, он будет работать. Это просто не происходит по умолчанию при установке вашего пакета.

1 голос
/ 25 ноября 2013

только что столкнулся с подобной проблемой и нашел решение в руководстве по автоматике :

noinst_HEADERS будет правильной переменной для использования в каталоге, содержащем только заголовки и не связанном с библиотекой или программой

Andreas

0 голосов
/ 01 декабря 2010

Не используйте SUBDIRS тогда.Может работать следующий хак:

all-local:
        ${MAKE} -C thatlib all

Конечно, было бы лучше, если бы библиотека оставалась в своем собственном каталоге за пределами вашего проекта, и вы просто указывали бы на нее с помощью флагов CFLAGS / LIBS.

...