将 `all` 声明为 .PHONY 的目的?
Purpose of declaring `all` as .PHONY?
GNU Make 手册描述了 .PHONY
的以下 use case。
all : prog1 prog2 prog3
.PHONY : all
prog1 : prog1.o utils.o
cc -o prog1 prog1.o utils.o
prog2 : prog2.o
cc -o prog2 prog2.o
prog3 : prog3.o sort.o utils.o
cc -o prog3 prog3.o sort.o utils.o
它说我现在可以调用 make
来重新制作所有三个程序。这很好,但我可以在不将 all
声明为 .PHONY
的先决条件的情况下实现相同的目标(因为 all
是默认目标)。因此,我的问题是:
仅 all
的目的是否被列为 .PHONY
的先决条件,即使我不小心,我仍然可以重新制作所有三个程序,在在不太可能的情况下,在名为 all
的同一目录中创建一个文件?如果有其他原因,我很想知道,谢谢。
Is the only purpose of all
being listed as a prerequisite of .PHONY
that I can still remake all three programs even if I accidentally, in the unlikely case, create a file in the same directory named all
?
你看起来很怀疑,但是是的。这是在该示例中声明 all
虚假的唯一目的。
如您链接的手册部分所述:
There are two reasons to use a phony target: to avoid a conflict with a file of the same name, and to improve performance.
就是这样。这两个结果都来自 make
不根据目标是否对应于现有文件的名称,或者如果对应于该文件相对于任何先决条件的时间戳,对虚假目标的配方的执行进行调节。它甚至不寻找这样的文件。这就是声明目标虚假的实际效果的全部范围。
另请注意,虽然在示例中使用 .PHONY
的优势可能看起来很小,但为什么要防止名为“all”的文件被添加到目录这样不太可能发生的事件? -- 我们确实不时在这里收到问题,这些问题最终是由(非)虚假问题引起的。所以帮自己一个忙,并在适当的时候宣布你的目标 .PHONY
。这并不难,它可能只会让您、您的团队或您的客户免去极大的悲伤。
GNU Make 手册描述了 .PHONY
的以下 use case。
all : prog1 prog2 prog3
.PHONY : all
prog1 : prog1.o utils.o
cc -o prog1 prog1.o utils.o
prog2 : prog2.o
cc -o prog2 prog2.o
prog3 : prog3.o sort.o utils.o
cc -o prog3 prog3.o sort.o utils.o
它说我现在可以调用 make
来重新制作所有三个程序。这很好,但我可以在不将 all
声明为 .PHONY
的先决条件的情况下实现相同的目标(因为 all
是默认目标)。因此,我的问题是:
仅 all
的目的是否被列为 .PHONY
的先决条件,即使我不小心,我仍然可以重新制作所有三个程序,在在不太可能的情况下,在名为 all
的同一目录中创建一个文件?如果有其他原因,我很想知道,谢谢。
Is the only purpose of
all
being listed as a prerequisite of.PHONY
that I can still remake all three programs even if I accidentally, in the unlikely case, create a file in the same directory namedall
?
你看起来很怀疑,但是是的。这是在该示例中声明 all
虚假的唯一目的。
如您链接的手册部分所述:
There are two reasons to use a phony target: to avoid a conflict with a file of the same name, and to improve performance.
就是这样。这两个结果都来自 make
不根据目标是否对应于现有文件的名称,或者如果对应于该文件相对于任何先决条件的时间戳,对虚假目标的配方的执行进行调节。它甚至不寻找这样的文件。这就是声明目标虚假的实际效果的全部范围。
另请注意,虽然在示例中使用 .PHONY
的优势可能看起来很小,但为什么要防止名为“all”的文件被添加到目录这样不太可能发生的事件? -- 我们确实不时在这里收到问题,这些问题最终是由(非)虚假问题引起的。所以帮自己一个忙,并在适当的时候宣布你的目标 .PHONY
。这并不难,它可能只会让您、您的团队或您的客户免去极大的悲伤。