如何在递归自动生成的 Makefile 之间传递变量

How to pass variables between recursive autogenerated Makefiles

我正在寻找我的问题的解决方案一段时间,并怀疑我选择了错误的方法,但它看起来很简单,可以实现。

基本上我想通知我的应用程序将在何处安装一些额外的数据。我通过在编译期间定义预处理器变量来做到这一点。不幸的是,数据安装和应用程序编译是在两个单独的 Makefile 中定义的(使用 autotools 生成),我不知道如何在它们之间传递这个安装路径。

我从我的项目中提取了有问题的部分,所以它看起来是这样的:

/
|-- configure.ac
|-- Makefile.am
|-- info
|   \-- index.html
\-- src
    |-- Makefile.am
    \-- main.cpp

configure.ac

AC_INIT(foo, 1.0)
AC_CONFIG_SRCDIR(src/main.cpp)
AM_INIT_AUTOMAKE
AC_PROG_CXX
AC_OUTPUT(Makefile src/Makefile)

Makefile.am

infodir = $(datadir)/foo/
nobase_dist_info_DATA = info/index.html
SUBDIRS = . src

src/Makefile.am

bin_PROGRAMS = foo
foo_SOURCES = main.cpp
foo_CPPFLAGS = -DWEB_PATH=\"$(infodir)\"

后./configure $(infodir) in src/Makefile 未定义。我如何告诉 src/Makefile.am 使用顶级 Makefile 中的值生成此变量?或者,如果这只是错误的方法,我怎样才能以正确的方式实现我的目标?

为此,您最好使用非递归 make。

但是,如果你真的想这样做,那么你可以使用包含。将 infodir 的定义放在一个名为 Makefile-common.am.inc 的文件中,然后在每个 Makefile 中写入

include $(top_srcdir)/Makefile-common.am.inc