возможно, неопределенный макрос: ошибка 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.
Это произошло со мной , когда я забыл 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
есть две возможные причины этой проблемы:
-
не устанавливал aclocal.
:решения установить libtool не- для ubuntu:
sudo apt-get install libtool
- для centos:
sudo yum install libtool
- для ubuntu:
-
путь к LIBTOOL.М4-это ошибка.
решение:- использовать
aclocal --print-ac-dir
чтобы проверить текущий путь к aclocal.(Обычно это должно быть "/ usr / share / aclocal " или "/usr / share / aclocal") - затем проверьте, есть ли *.файлы m4.
- если нет, СР соответствующий *.файлы 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