gnu make "leaf" 先决条件
gnu make "leaf" prerequisites
是否可以了解目标的叶先决条件?
在这种情况下,t1
的叶先决条件是 t3
和 foo.txt
,而 t2
是中间条件:
t1: t2 t3
cat t2 t3 > t1
t2: foo.txt
cat $< > $@
在此示例中,t2
严格来说是一个中间存储库,并且 t3 已经存在(它不可生成)。
如何从 make 中获取 t3
和 foo.txt
作为 t1
的叶目标?期望存在这样的设施是否合理?
用例:我正在将 LaTeX 文档编译为 PDF,并且想要 pdfattach 所有叶先决条件而不在 Makefile 中明确列出它们。
在规则中,可以通过 automatic variables 访问先决条件,例如 $<
和 $^
。
但是,make
必须知道正确重建的先决条件,因此 make 变量中必须有一个文件列表。该文件列表可以明确指定,也可以从文件或其他命令中读取。
你可以
make --dry-run --debug=a t1 | grep "Considering target"
并编写一个复杂的脚本来解析输出(最后一行,以及任何缩进大于其后续行的条目都将被保留)。虽然听起来您想从 make 调用中访问此列表,但我认为没有任何内置支持。
(您可以从配方中进行递归调用——效率不高,但可能有效)。
是否可以了解目标的叶先决条件?
在这种情况下,t1
的叶先决条件是 t3
和 foo.txt
,而 t2
是中间条件:
t1: t2 t3
cat t2 t3 > t1
t2: foo.txt
cat $< > $@
在此示例中,t2
严格来说是一个中间存储库,并且 t3 已经存在(它不可生成)。
如何从 make 中获取 t3
和 foo.txt
作为 t1
的叶目标?期望存在这样的设施是否合理?
用例:我正在将 LaTeX 文档编译为 PDF,并且想要 pdfattach 所有叶先决条件而不在 Makefile 中明确列出它们。
在规则中,可以通过 automatic variables 访问先决条件,例如 $<
和 $^
。
但是,make
必须知道正确重建的先决条件,因此 make 变量中必须有一个文件列表。该文件列表可以明确指定,也可以从文件或其他命令中读取。
你可以
make --dry-run --debug=a t1 | grep "Considering target"
并编写一个复杂的脚本来解析输出(最后一行,以及任何缩进大于其后续行的条目都将被保留)。虽然听起来您想从 make 调用中访问此列表,但我认为没有任何内置支持。
(您可以从配方中进行递归调用——效率不高,但可能有效)。