我在makefile中有以下内容:
.PHONY: preq_test a b c d
a b c d:
@echo building $@
preq_test : a b | c d
@echo preq prequisites are: $^;
现在,$^
应根据文档列出所有先决条件(除了重复项):
$^
$+
The names of all the prerequisites, with spaces between them. For prerequisites
which are archive members, only the named member is used (see Archives). The value
of $^ omits duplicate prerequisites, while $+ retains them and preserves their
order.
但仅限订单的先决条件未显示在$^
:
building a
building b
building c
building d
preq prequisites are: a b
我可以依赖当前的行为,还是应该以其他方式工作,还是应该将其视为未定义的行为?
谢谢,
约翰
答案 0 :(得分:6)
$^
的{{3}}是省略仅限订单的先决条件,因此您可以依赖它(documented behavior $|
来 >仅限订单的先决条件,BTW)。
答案 1 :(得分:2)
是的,因为Anton说$^
不会列出仅限订单的先决条件,因为在|
之后打印依赖关系必须使用$|
。
检查以下makefile代码,
a b c d:
@echo building $@
preq_test:a b | c d
@echo preq prequisites are: $^ $|;
欲了解更多信息:
$^
所有先决条件的名称,它们之间有空格。对于作为存档成员的先决条件,仅使用指定的成员(请参阅存档)。无论每个文件作为先决条件列出多少次,目标在其依赖的每个其他文件上只有一个先决条件。因此,如果您为目标多次列出先决条件,则$ ^的值仅包含该名称的一个副本。 This list does not contain any of the order-only prerequisites; for those use
$ | variable.
$+
这类似于$^
,但是多次列出的先决条件按照它们在makefile中列出的顺序重复。这主要用于链接命令,以便按特定顺序重复库文件名。
$|
The names of all the order-only prerequisites, with spaces between them.