autoreconf -fi错误:可能是未定义的宏:AC_DEFINE如果此令牌和其他令牌是合法的,请使用m4_pattern_allow

时间:2016-12-24 20:15:20

标签: macros autoconf automake m4

我设置的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 个答案:

答案 0 :(得分: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的问题是通常问题显示错误的症状。