重建时Autotools会忘记aclocal标志

时间:2019-06-18 03:19:40

标签: makefile gnu-make autoconf

重建项目时,我无法让Autotools发现自定义m4宏。

我正在使用Autotools作为构建系统以及Linux上的Make和gcc配置C项目。我已经指定了一个自定义安装前缀(使用--prefix),因此我在那儿搜索大多数库依赖项。该项目的构建系统取决于安装到${prefix}/share/aclocal的一些自定义m4宏。有些是由依赖项(libgcrypt.m4构建的,有些是我自己安装的(autoconf archive中的ax_pthread.m4)。

只要我告诉aclocal在哪里可以找到这些宏,该方法就很好用。我通常通过在命令行--include=/custom/install/prefix/share/aclocal中传递autoreconf option来完成此操作。这会传递到aclocal,然后可以找到所需的m4宏。

除非我触摸configure.ac,否则此方法效果很好。此时,Autotool的Makefile将重建所有configure依赖关系,其中之一似乎涉及重新运行aclocal。这样做没有必需的--include标志,因此失败。

这是Autotool生成的Makefile中令人反感的命令:

$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
    $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)

此对aclocal的调用不知道对autoreconf的原始命令行选项,因此无法找到所需的宏。 Autoconf稍后会在尝试实际使用宏时由于格式错误的m4引发错误。

我尝试将prefix的内容添加到ACLOCAL_AMFLAGS的{​​{1}}中,但是失败了,因为Makefile将Makefile.am的内容直接传递到了shell中。您将得到ACLOCAL_AMFLAGS或类似名称。

一种骇人听闻的解决方案是编辑aclocal -I $(prefix)ACLOCAL的内容:

configure.ac

,但是如果用户决定在命令行中覆盖ACLOCAL="ACLOCAL_PATH=$datadir/aclocal $ACLOCAL" ,则可能会导致问题。感觉也错了...

一种更可行的解决方案是在运行ACLOCALACLOCAL_PATH之前在命令行中指定autoreconf

是否有惯用的方式来包含来自自定义安装目录的make脚本?对于整个问题,也许有不同的方法。

0 个答案:

没有答案