(sub) Makefile 中未知的符号 ($(bindir), $(sysconfdir),...)

Symbols ($(bindir), $(sysconfdir),...) unknown in (sub) Makefiles

我是第一次使用 autotools,是用 perl (SQLTeX) 编写的工具,所以只需要安装,不需要编译。

顶层包含一个简单的 Makefile.am:

AUTOMAKE_OPTIONS = foreign
SUBDIRS = src man doc

EXTRA_DIST = README.md

.PHONY: all-am
all-am:
    @echo "Done!"

如果我也在子目录中创建 Makefile.am 个文件,那里似乎什么也没有发生,所以我只是坚持 Makefile。来自 src/Makefile (EDIT: this file is now renamed to Makefile.am 的片段):

SQLTeX: SQLTeX.pl
    cat $^ | sed -e 's#{PERLDIR}#$(PL)#;s#{SYSCONFDIR}#$(sysconfdir)#' > $@
    @chmod +x $@

符号PL被设置为预期(在同一个makefile中定义),但是sysconfdir是空的,尽管它是在[生成的顶层Makefile中定义的=20=].

我做错了什么?

提前致谢!

What am I doing wrong?

虽然 Autotools 支持递归到您提供预构建 makefile 的目录,但您不能指望这些预构建 makefile 能够依赖 autotools 提供的变量,例如标准目录变量 bindirsysconfdir。因此,虽然 允许 依赖子目录中的手写 makefile,但这对您来说可能是错误的踪迹。

我建议回到这个:

If I create Makefile.am files in the sub-directories too, nothing seems to happen there

并找出问题所在。 Autotools 绝对支持生成递归构建系统,每个目录一个 Makefile.am 是通常方法的一部分。如果它对您不起作用,那么我的第一个猜测是您忘记在 AC_CONFIG_FILES 列表中列出额外的 makefile。

作为替代方案,仅仅因为您有多个目录并不意味着您需要使用递归 make。在单个 makefile 的支持下构建这样的项目是很有可能的,而 Autotools 可以帮助构建这样的 makefile。