2009-06-11 3 views
1

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

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

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

ответ

4

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

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

Пример того, как SUBDIRS вашего TopLevel Makefile.am, чтобы построить в желаемом порядке:

SUBDIRS = csv gtkworkbook src 

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

AC_OUTPUT([ 
    Makefile 
    src/Makefile 
    gtkworkbook/Makefile 
    csv/Makefile 
]) 
+0

т.е. вам нужно SUBDIRS = CSV gtkworkbook ЦСИ (да, я печатал ответ, как и его Антони!) – dajobe

+0

я сделал это, но это не делает казалось, сработали. Makefile.am в верхнем каталоге имеет те же поддиры, и AC_OUTPUT тоже был изменен. Какие-либо предложения? –

+0

Вы уверены, что изменения в вашем Makefile.am распространяются на ваш Makefile? GNU делает попытки сделать это автоматически для случаев, которые он может обнаружить, но иногда требуется регенерация после редактирования configure.in. Перезапустите свой автогенный скрипт. – anthony