Компиляция Autoconf зависимости перед применением

Последние пару дней я работал с автоинструментами и, наконец, добился значительного прогресса. Одна проблема, с которой я сталкиваюсь, заключается в том, что у меня есть две библиотеки, которые необходимо скомпилировать перед основным кодом приложения. Я не совсем уверен, как это сделать. Моя структура каталогов ниже, а также фрагмент моего файла configure.ac.

AC_CONFIG_FILES([Makefile
         src/Makefile
         gtkworkbook/Makefile
         csv/Makefile])
AC_OUTPUT

Мне нужно, чтобы csv/Makefile и gtkworkbook/Makefile были скомпилированы до src/Makefile; есть ли способ указать это? Прямо сейчас я получаю сообщение об ошибке о том, что библиотека (csv) не существует во время процесса компиляции приложения.


person John Bellone    schedule 11.06.2009    source источник


Ответы (1)


Порядок элементов в AC_CONFIG_FILES() не влияет на порядок сборки. Если вы используете automake, как я предполагаю, он будет проходить по вашему дереву каталогов в том порядке, в котором вы перечисляете каталоги в каждом списке SUBDIRS Makefile.am.

При этом у вас должен быть порядок элементов в AC_CONFIG_FILES(), отражающий порядок сборки, для согласованности/обслуживаемости.

Пример того, как SUBDIRS вашего Makefile.am верхнего уровня строить в желаемом порядке:

SUBDIRS = csv gtkworkbook src

Кроме того, в этом простом случае вам не нужны ни AC_CONFIG_FILES(), ни AC_OUTPUT(). Вы можете передать свой каталог списка в AC_OUTPUT():

AC_OUTPUT([
    Makefile
    src/Makefile
    gtkworkbook/Makefile
    csv/Makefile
])
person anthony    schedule 11.06.2009
comment
то есть вам нужно SUBDIRS=csv gtkworkbook src (да, я печатал ответ, как и Энтони!) - person dajobe; 12.06.2009
comment
Я сделал это, но, похоже, это не сработало. Makefile.am в верхнем каталоге имеет те же подкаталоги, и AC_OUTPUT также был изменен. Какие-либо предложения? - person John Bellone; 12.06.2009
comment
Вы уверены, что изменения из вашего Makefile.am распространились на ваш Makefile? GNU пытается сделать это автоматически в тех случаях, когда он может это обнаружить, но иногда после редактирования файла configure.in требуется повторная установка. Перезапустите скрипт автогена. - person anthony; 12.06.2009
comment
обычно он добавляет соответствующие правила для регенерации в выходные файлы Makefile только в том случае, если вы настроили --enable-maintainer-mode. в противном случае, как говорит Энтони, регенерируйте, если Makefile верхнего уровня имеет неправильные SUBDIRS. - person dajobe; 12.06.2009