可能未定义macros:AC_MSG_ERROR

我有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 

任何人都可以解释是什么原因导致这个错误,以及如何追查问题?

编辑:添加有关差异的细节。

工作箱:

 uname -a Linux host1 2.6.38-13-generic #53-Ubuntu SMP Mon Nov 28 19:33:45 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux automake: 1.11.1 autoconf: 2.67 m4: 1.4.14 libtoolize: 2.2.6b 

不起作用的盒子:

 Linux host2 2.6.32-35-generic-pae #78-Ubuntu SMP Tue Oct 11 17:01:12 UTC 2011 i686 GNU/Linux automake: 1.11.1 autoconf: 2.65 m4: 1.4.13 libtoolize: 2.2.6b 

新编辑:只有32位机器遇到这个困难。

更新我能够在一个CentOS机器上使用autoconf 2.67automake 1.11.1libtool 2.2.6bm4 1.4.14重现问题。 这只是一个32位机器的错误?

我有这个相同的问题,发现pkg-config包丢失。

安装完包后,所有东西都能正确生成。

build议使用autoreconf -fi而不是手动调用aclocal;autoconf;automake; #and whatever else aclocal;autoconf;automake; #and whatever else正确填充aclocal.m4等。

如果不使用任何自己的m4文件,添加ACLOCAL_AMFLAGS = -I m4 (到顶层Makefile.am)和AC_CONFIG_MACRO_DIR([m4])当前仍然是可选的,但是当然,这样做会使进程沉默:)

我有我自己的configure.ac这个问题,但在这种情况下(和谷歌任何人的利益),这是因为我不小心引用AC_MSG_ERROR所以它被视为一个string:

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

一旦我删除AC_MSG_ERRORmacros的方括号,它的工作AC_MSG_ERROR

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

那些说你应该安装pkg-config或者一些软件包的评论是没有意义的。 AC_MSG_ERROR应该工作,给你一个有用的信息,如“你需要安装软件包XYZ”,但由于某些问题, AC_MSG_ERROR不起作用。 安装软件包XYZ肯定会使错误消失,但只是因为一旦软件包在那里,就不再需要打印错误信息!

所以安装pkg-config或者一个特定的软件包只是绕过这个问题,它并没有真正解决这个问题。

我在CentOS 7下遇到了同样的问题

在这种情况下,安装libcurl-devel后,问题就会消失( libcurl已经安装在本机上)

我也有类似的问题..我的解决scheme是

 apt-get install libcurl4-openssl-dev 

(我已经安装了libcurl)至less为我工作..

你正在build立一个本地“ m4 ”目录吗? 例如,

> aclocal -I m4 --install

有些软件包带有autogen.shinitgen.sh shell脚本来运行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。 你说错误只发生在“一些设置”。 我build议在这些设置中,你的autoconf安装是fubar。 可能你已经安装了不兼容的m4版本。

使用MacOS X

 sudo port install pkgconfig 

是解决scheme!

在Mac OS X el上尉酿造,尝试:
brew安装pkgconfig

这对我有效。

对于Debian。 所需的软件包是:m4 automake pkg-config libtool

当我在一个本地定义的macros的参数中忘记了一个这个事情时,发生在我身上。 花了几个小时试图弄清楚(几乎不知道autotools)…

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

本来应该

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

似乎应该给我一个错误或这样的错误,但我想是一个macros处理器,它只能做它所告诉的。

我在Ubuntu上遇到同样的问题( error: possibly undefined macro: AC_MSG_ERROR ),但上面的答案不适用于我。 我在这里find了解决scheme

那就是诀窍:

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

在Mac上安装pkg-config后,我的问题得到解决(brew install pkg-config)

我通过yum install libtool解决了这个问题

在新安装的计算机上,Macports端口“openocd”(本地修改Portfile以使用git存储库)也遇到同样的问题。

永久修复很简单,在Portfile中定义对pkgconfig的依赖关系:depends_lib-append port:pkgconfig