2010-11-30 5 views
2

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

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

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

ответ

0

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

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

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

+1

Я хотел бы сохранить его за пределами моего дерева, но я пытаюсь сократить внешние зависимости. Спасибо, попробуем это. – 2010-11-30 22:01:50

2

Вот эта идея.

Переместите все сторонние библиотеки, которые вы не хотите видеть установленными в подкаталог под названием 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:; @: 

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

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

1

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

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

Andreas