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

时间:2015-03-27 11:22:48

标签: makefile autotools automake

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

基本上我想通知我的应用程序将安装一些额外的数据。我是通过在编译期间定义预处理器变量来实现的。不幸的是,数据安装和应用程序编译是在两个单独的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)\"

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

1 个答案:

答案 0 :(得分:0)

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

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

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