autoreconf -fi 错误:可能未定义宏:AC_DEFINE 如果此令牌和其他令牌是合法的,请使用 m4_pattern_allow
Posted
技术标签:
【中文标题】autoreconf -fi 错误:可能未定义宏:AC_DEFINE 如果此令牌和其他令牌是合法的,请使用 m4_pattern_allow【英文标题】:autoreconf -fi error: possibly undefined macro: AC_DEFINE If this token and others are legitimate, please use m4_pattern_allow 【发布时间】:2016-12-24 20:15:19 【问题描述】:我的 autoconf 设置相当新:
m4 (GNU M4) 1.4.17 and came with ubuntu
autoconf (GNU Autoconf) 2.69
我的 configure.ac 相当简单:
30 ACX_PTHREAD([
31 AC_DEFINE([HAVE_PTHREAD], [1], [Define if you have POSIX threads libraries and headers])
32 gtest_LIBS="$PTHREAD_LIBS $LIBS"
33 gtest_CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
34 gtest_CXXFLAGS="$CXXFLAGS $PTHREAD_CXXFLAGS"
35 gtest_CC="$PTHREAD_CC"
36 gtest_CXX="$PTHREAD_CXX"])
运行 autconf 给了我错误:
autoreconf -fi
libtoolize: putting auxiliary files in '.'.
libtoolize: copying file './ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.
libtoolize: copying file 'm4/libtool.m4'
libtoolize: copying file 'm4/ltoptions.m4'
libtoolize: copying file 'm4/ltsugar.m4'
libtoolize: copying file 'm4/ltversion.m4'
libtoolize: copying file 'm4/lt~obsolete.m4'
configure.ac:31: error: possibly undefined macro: AC_DEFINE
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
我相信我的 ACX_PTHREAD 宏给我带来了麻烦。我查看了这个宏的定义,并没有发现任何奇怪的地方。有人建议这是由于其他情况下缺少 pkg.m4 造成的。我确认我的系统上安装了最新版本的 pkg-config。 pkg.m4 存在于我的系统上:/usr/share/aclocal。我一直在研究解决此问题的方法,但无处可去。
【问题讨论】:
【参考方案1】:我的问题原来是由于缺少 axc_pthread.m4 文件。这就是我发现它的方式:
autoreconf -fi 给出了错误信息。如果我运行 autoreconf -i 那么程序将静默运行而不会出现任何错误消息。运行 ./configure 将在 ACX_PTHREAD(...) 逐字复制到配置文件的行中揭示问题。这表明我的系统中没有定义 ACX_PTHREAD 宏。
下载链接位于:http://ac-archive.sourceforge.net/ac-archive/acx_pthread.html。经过一些研究,似乎有很多来源提供了这个宏定义。不确定哪个更好。但我渴望解决这个问题。将此文件复制到我的项目的 m4 目录后,我的问题得到了解决。希望这可以帮助其他人。 autoconf 的问题在于,问题通常会显示错误的症状。
【讨论】:
您应该在包含ACX_PTHREAD(...)
的第一行上方添加一行m4_pattern_forbid([ACX_PTHREAD])dnl
。然后包含字符串ACX_PTHREAD
的configure
文件将被视为错误,configure
文件的生成将失败,并指向丢失的 m4 文件,该文件应定义为 ACX_PTHREAD
。以上是关于autoreconf -fi 错误:可能未定义宏:AC_DEFINE 如果此令牌和其他令牌是合法的,请使用 m4_pattern_allow的主要内容,如果未能解决你的问题,请参考以下文章