GNU Autotools: настройка и autoreconf

Вопрос или проблема

У меня вопрос по работе с 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, это может указывать на несколько проблем, которые можно исправить.

  1. Предупреждения от libtoolize:
    Вы видите предупреждения от libtoolize, касающиеся AC_CONFIG_MACRO_DIRS и ACLOCAL_AMFLAGS. Это происходит, когда в configure.ac не указаны необходимые параметры для правильной настройки макросов. Чтобы устранить эти предупреждения, вам следует:

    • Откройте файл configure.ac и добавьте следующую строку, если её нет:
      AC_CONFIG_MACRO_DIR([m4])
    • После добавления этой строки выполните:
      libtoolize --force --copy
      aclocal -I m4
  2. Замена INCLUDES на AM_CPPFLAGS:
    Предупреждения о том, что INCLUDES является устаревшим именем для AM_CPPFLAGS, указывают на необходимость обновления вашего Makefile.am. Если в ваших файлах Makefile.am есть строки, начинающиеся с INCLUDES, замените их на AM_CPPFLAGS. Например:

    Обновите:

    INCLUDES = -I/path/to/include

    на:

    AM_CPPFLAGS = -I/path/to/include
  3. Удаление ACLOCAL_AMFLAGS:
    Если предупреждения продолжают появляться, и вы не нуждаетесь в строке с ACLOCAL_AMFLAGS в вашем Makefile.am, попробуйте её удалить:

    # Удалите эту строку
    ACLOCAL_AMFLAGS = "-I m4"
  4. Создание каталога m4:
    Если в вашем проекте ещё не создан каталог m4, создайте его, так как это может помочь избежать некоторых предупреждений:

    mkdir m4

После выполнения указанных выше действий, попробуйте снова запустить:

autoreconf -fi

Заключение

Эти шаги должны помочь вам избавиться от предупреждений, возникающих при выполнении autoreconf. Если вы всё ещё сталкиваетесь с проблемами, убедитесь, что все зависимости установлены и обновлены до последних версий, так как иногда это может быть причиной некорректной работы libtoolize или autoreconf.

Оцените материал
Добавить комментарий

Капча загружается...