可能未定义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.67
, automake 1.11.1
, libtool 2.2.6b
和m4 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_ERROR
macros的方括号,它的工作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.sh
或initgen.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