gnu make "leaf" 先决条件

gnu make "leaf" prerequisites

是否可以了解目标的叶先决条件?

在这种情况下,t1 的叶先决条件是 t3foo.txt,而 t2 是中间条件:

t1: t2 t3
  cat t2 t3 > t1

t2: foo.txt
  cat $< > $@

在此示例中,t2 严格来说是一个中间存储库,并且 t3 已经存在(它不可生成)。

如何从 make 中获取 t3foo.txt 作为 t1 的叶目标?期望存在这样的设施是否合理?

用例:我正在将 LaTeX 文档编译为 PDF,并且想要 pdfattach 所有叶先决条件而不在 Makefile 中明确列出它们。

在规则中,可以通过 automatic variables 访问先决条件,例如 $<$^

但是,make 必须知道正确重建的先决条件,因此 make 变量中必须有一个文件列表。该文件列表可以明确指定,也可以从文件或其他命令中读取。

你可以

make --dry-run --debug=a t1 | grep "Considering target"

并编写一个复杂的脚本来解析输出(最后一行,以及任何缩进大于其后续行的条目都将被保留)。虽然听起来您想从 make 调用中访问此列表,但我认为没有任何内置支持。

(您可以从配方中进行递归调用——效率不高,但可能有效)。