Вопрос или проблема
У меня вопрос по работе с autotools, особенно по генерации скриптов конфигурации с помощью команды
autoreconf -fi
Я получаю следующие предупреждения:
libtoolize: помещает вспомогательные файлы в '.'.
libtoolize: копирует файл './ltmain.sh'
libtoolize: рассмотрите возможность добавления 'AC_CONFIG_MACRO_DIRS([m4])' в configure.ac,
libtoolize: и повторного выполнения libtoolize и aclocal.
libtoolize: рассмотрите возможность добавления '-I m4' в ACLOCAL_AMFLAGS в Makefile.am.
configure.ac:12: устанавливается './compile'
configure.ac:15: устанавливается './config.guess'
configure.ac:15: устанавливается './config.sub'
configure.ac:6: устанавливается './install-sh'
configure.ac:6: устанавливается './missing'
Makefile.am: устанавливается './INSTALL'
src/Makefile.am:5: предупреждение: 'INCLUDES' — это старое название для 'AM_CPPFLAGS' (или '*_CPPFLAGS')
src/Makefile.am: устанавливается './depcomp'
src/filteropt/Makefile.am:3: предупреждение: 'INCLUDES' — это старое название для 'AM_CPPFLAGS' (или '*_CPPFLAGS')
src/memory/Makefile.am:3: предупреждение: 'INCLUDES' — это старое название для 'AM_CPPFLAGS' (или '*_CPPFLAGS')
src/pagemanager/Makefile.am:3: предупреждение: 'INCLUDES' — это старое название для 'AM_CPPFLAGS' (или '*_CPPFLAGS')
src/raster/Makefile.am:5: предупреждение: 'INCLUDES' — это старое название для 'AM_CPPFLAGS' (или '*_CPPFLAGS')
src/raster/blendSource/Makefile.am:3: предупреждение: 'INCLUDES' — это старое название для 'AM_CPPFLAGS' (или '*_CPPFLAGS')
После этого я могу вручную пройтись и заменить INCLUDES на AM_CPPFLAGS, а также добавить -I m4, но разве я не должен был иметь возможность обновить файлы конфигурации, чтобы не получать эти предупреждения?
Где мне внести эти изменения, чтобы избежать этих предупреждений?
Согласно странице man для autoreconf:
По умолчанию он только пересоздает те файлы, которые старше своих
источников. Если вы установите новые версии системы сборки GNU, вы можете
заставить (‘autoreconf’ пересоздать все файлы, указав опцию ‘–force’).
Таким образом, похоже, что просто запуская autoreconf -fi
, он должен автоматически обновлять эти файлы конфигурации.
Как известно, libtoolize зависает. autoreconf иногда обвиняют в этой проблеме, но на самом деле проблема заключается исключительно в libtoolize. autoreconf запускает libtoolize, и именно тогда появляется проблема. Однако, если просто запустить libtoolize в командной строке, проблема также проявляется.
Разные источники в Интернете предлагают изменения в configure.ac.
# configure.ac (это не помогает)
AC_CONFIG_AUX_DIR([.])
Это не работает.
Другие предлагают сначала создать каталог m4. Это не помогает.
Временное решение — удалить строку ACLOCAL_AMFLAGS из Makefile.am и просто смириться с предупреждением от libtoolize.
# удалите это из Makefile.am
ACLOCAL_AMFLAGS="-I m4"
Если вам действительно нужна какая-либо строка ACLOCAL_AMFLAGS в Makefile.am, то, ах…, у вас проблема, которую я не могу решить. Удачи.
Ответ или решение
Когда вы работаете с autotools
и получаете предупреждения после выполнения команды autoreconf -fi
, это может указывать на несколько проблем, которые можно исправить.
-
Предупреждения от libtoolize:
Вы видите предупреждения отlibtoolize
, касающиесяAC_CONFIG_MACRO_DIRS
иACLOCAL_AMFLAGS
. Это происходит, когда вconfigure.ac
не указаны необходимые параметры для правильной настройки макросов. Чтобы устранить эти предупреждения, вам следует:- Откройте файл
configure.ac
и добавьте следующую строку, если её нет:AC_CONFIG_MACRO_DIR([m4])
- После добавления этой строки выполните:
libtoolize --force --copy aclocal -I m4
- Откройте файл
-
Замена INCLUDES на AM_CPPFLAGS:
Предупреждения о том, чтоINCLUDES
является устаревшим именем дляAM_CPPFLAGS
, указывают на необходимость обновления вашегоMakefile.am
. Если в ваших файлахMakefile.am
есть строки, начинающиеся сINCLUDES
, замените их наAM_CPPFLAGS
. Например:Обновите:
INCLUDES = -I/path/to/include
на:
AM_CPPFLAGS = -I/path/to/include
-
Удаление ACLOCAL_AMFLAGS:
Если предупреждения продолжают появляться, и вы не нуждаетесь в строке сACLOCAL_AMFLAGS
в вашемMakefile.am
, попробуйте её удалить:# Удалите эту строку ACLOCAL_AMFLAGS = "-I m4"
-
Создание каталога m4:
Если в вашем проекте ещё не создан каталогm4
, создайте его, так как это может помочь избежать некоторых предупреждений:mkdir m4
После выполнения указанных выше действий, попробуйте снова запустить:
autoreconf -fi
Заключение
Эти шаги должны помочь вам избавиться от предупреждений, возникающих при выполнении autoreconf
. Если вы всё ещё сталкиваетесь с проблемами, убедитесь, что все зависимости установлены и обновлены до последних версий, так как иногда это может быть причиной некорректной работы libtoolize
или autoreconf
.