возможно, неопределенный макрос: ошибка AC MSG

у меня есть следующее в configure.ac:

AC_CHECK_PROGS(MAKE,$MAKE make gmake,error)
if test "x$MAKE" = "xerror" ;then
  AC_MSG_ERROR([cannot find a make command])
fi

это было в нашем проекте в течение длительного времени, но в некоторых настроек, я получаю эту ошибку:

configure.ac:45: error: possibly undefined macro: AC_MSG_ERROR
  If this token and others are legitimate, please use m4_pattern_allow.
  See the Autoconf documentation.

строки, которые были недавно добавлены выше этого:

AC_CONFIG_MACRO_DIR([m4])
LT_INIT

кто-нибудь может объяснить, что вызывает эту ошибку и как отследить проблему?

EDIT: добавление сведений о различиях.

17 ответов


У меня была такая же проблема, и я обнаружил, что отсутствует.

после установки пакета, все правильно.


рекомендуется использовать autoreconf -fi вместо ручного вызова aclocal;autoconf;automake; #and whatever else для правильного заполнения aclocal.М4 и так далее.

добавлять ACLOCAL_AMFLAGS = -I m4 (в файл Makefile верхнего уровня.am) и AC_CONFIG_MACRO_DIR([m4]) В настоящее время все еще необязательно, если вы не используете собственные файлы m4, но, конечно, это заставит замолчать proocess:)


у меня была эта проблема с моей собственной configure.ac, но в этом случае (и в интересах любого здесь из Google) это было потому, что я случайно процитировал AC_MSG_ERROR таким образом, это рассматривалось как строка:

AX_BOOST_BASE([1.42], [], [AC_MSG_ERROR([Could not find Boost])])

как только я снял квадратные скобки вокруг AC_MSG_ERROR макрос, он работал:

AX_BOOST_BASE([1.42], [], AC_MSG_ERROR([Could not find Boost]))

эти комментарии говорят, что вы должны установить pkg-config или какой-то пакет не хватает точки. The AC_MSG_ERROR должен работать и дать вам полезное сообщение, как "Вам нужно установить пакет XYZ", но из-за какой-то проблемы AC_MSG_ERROR не работает. Установка пакета XYZ, безусловно, сделает ошибку уйти, но только потому, что как только пакет есть, больше нет необходимости печатать сообщение об ошибке!

поэтому установка pkg-config или конкретный пакет просто обходит проблему, он фактически не исправляет ее.


Я испытал эту же проблему под CentOS 7

в случае мая проблема ушла после установки libcurl-devel (libcurl уже был установлен на этой машине)


У меня также была аналогичная проблема.. мое решение

apt-get install libcurl4-openssl-dev

(У меня был установлен libcurl allready ) по крайней мере, для меня..


вы настраиваете локальный''? например,

> aclocal -I m4 --install

некоторые пакеты поставляются с autogen.sh или initgen.sh сценарий оболочки для запуска glibtoolize, autoheader, autoconf, automake. Вот это autogen.sh скрипт, который я использую:

#! /bin/sh

case `uname` in Darwin*) glibtoolize --copy ;;
  *) libtoolize --copy ;; esac

autoheader
aclocal -I m4 --install
autoconf

automake --foreign --add-missing --force-missing --copy

редактировать

возможно, вам придется добавить ACLOCAL_AMFLAGS = -I m4 топ-уровня Makefile.am.


ошибка генерируется autom4te. Если все настроено правильно, часть кода, которая генерирует эту ошибку, никогда не должна видеть "AC_MSG_ERROR", потому что она должна была быть расширена m4 до этой точки. Вы говорите, что ошибка происходит только "в некоторых настройках". Я бы предложил, чтобы в этих настройках ваша установка autoconf была fubar. Возможно, у вас установлена несовместимая версия m4.


Использование MacOS X

sudo port install pkgconfig

было решение!


на Mac OS X el captain с brew попробуйте:
заварить установить pkgconfig

Это работает для меня.


Я решил это с помощью yum install libtool


Для Debian. Требуемые пакеты: M4 automake pkg-config libtool


Это произошло со мной , когда я забыл a, в аргументах для локально определенного макроса. Потратил часы, пытаясь понять это (едва знаком с autotools)...

AC_CHECK_MACRO([Foo]
    AC_LOCAL_DO([......

должен был

AC_CHECK_MACRO([Foo],      # <-- Notice comma, doh!
    AC_LOCAL_DO([......

Кажется, он должен был дать мне ошибку или что-то в этом роде, но я полагаю, что, будучи макропроцессором, он может делать только то, что сказал.


у меня была такая же проблема на Ubuntu (error: possibly undefined macro: AC_MSG_ERROR) но ответы выше не сработали для меня. Я нашел решение здесь

что получилось:

$ LANG=C LC_CTYPE=C ./autogen.sh

моя проблема решена после установки pkg-config на Mac (brew install pkg-config)


есть две возможные причины этой проблемы:

  1. не устанавливал aclocal.
    :решения установить libtool не

    • для ubuntu:sudo apt-get install libtool
    • для centos:sudo yum install libtool
  2. путь к LIBTOOL.М4-это ошибка.
    решение:

    1. использовать aclocal --print-ac-dir чтобы проверить текущий путь к aclocal.(Обычно это должно быть "/ usr / share / aclocal " или "/usr / share / aclocal")
    2. затем проверьте, есть ли *.файлы m4.
    3. если нет, СР соответствующий *.файлы m4 по этому пути.( Возможно cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/ или cp /usr/local/share/aclocal/*.m4 /usr/share/aclocal/)

надеюсь, это поможет


У меня была такая же проблема на RHEL7.5 с otto-de / libvmod-uuid

Это было исправлено путем установки пакетов "autoconf-archive"


У меня была такая же проблема с портом Macports "openocd" (локально модифицированный файл порта для использования репозитория git) на недавно установленной машине.

постоянное исправление легко, определите зависимость от pkgconfig в файле порта: depends_lib-добавить порт: pkgconfig