2012-01-05 1 views
2

Мне интересно, возможно ли это вообще. Вот так:(Авто) делают зависимость от нескольких make-файлов

В моем проекте используется automake для создания своих целей. Верхний каталог содержит обычные configure.ac и Makefile.am. Среди других, Makefile.am содержит переменную SUBDIRS, перечисляющую подкаталоги, важные для моего вопроса - это doc и include. Файл Makefile include справочника выглядит следующим образом:

nobase_include_HEADERS = <lot-of-headers> 

поэтому в основном устанавливает заголовки. Makefile в doc предполагается генерировать HTML документацию из этих файлов:

doxygen-stamp: Doxyfile 
    $(DOXYGEN) $< 
    echo "timestamp for Doxyfile" > [email protected] 

all-local: doxygen-stamp 

Все отлично работает до сих пор, но если я изменить какие-либо из заголовков в include документации еще уточненный - потому что я не отображали их как зависимости. То, что я хотел бы иметь, это иметь doxygen-stamp -target, который перестраивается после изменения заголовков без, снова перечисляющих все заголовки в качестве зависимостей. Это возможно, и если да, то как?

ответ

1

В этом случае с помощью одного Makefile бы намекают - хотя вы можете разделить его с помощью инструкции Automake include (также смотрите раздел 7.3 «Альтернативный подход к поддиректории» в руководстве утра). Поэтому:

#can't use nobase_ 
include_HEADERS = include/foo.h include/bar.h 

doc/doxygen-stamp: ${include_HEADERS} 
+0

Мне не нравится, что это нарушает строгое разделение, но, подумав об этом, слияние Make-файлов кажется лучшим решением. – cschwan

-1

Я думаю, что если вы сделаете doxygen-stamp, также зависеть от '$ (top_srcdir)/include/*. H' (или .hpp или что-то еще), то он будет перестраиваться, когда doxygen-stamp устарел относительно любого .h файл в каталоге include.

doxygen-stamp: Doxyfile $(top_srcdir)/include/*.h 
+0

Hm. Я уже думал о чем-то подобном, но в Automake эти шаблонные правила не работают! – cschwan

+1

Я не думаю, что это automake, я думаю, что это ваш make. Мы используем правила GNU make и wildcard, которые работают нормально (я их ненавижу, но они работают). –

+1

Если вы используете gnumake, вы можете попробовать следующее: 'HEADERS: = (wildcard $ (top_srcdir)/include/*. H)' –

 Смежные вопросы

  • Нет связанных вопросов^_^