重建项目时,我无法让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"
,则可能会导致问题。感觉也错了...
一种更可行的解决方案是在运行ACLOCAL
和ACLOCAL_PATH
之前在命令行中指定autoreconf
。
是否有惯用的方式来包含来自自定义安装目录的make
脚本?对于整个问题,也许有不同的方法。