Makefile 文件目标是否仅为虚假目标订单的先决条件?

Makefile 文件目标是否仅为虚假目标订单的先决条件?,makefile,gnu-make,Makefile,Gnu Make,文章提到“没有文件目标应该是.PHONY的先决条件。” 我想你可以把它改写成“不要声明文件目标是假的” 为了表达依赖关系,对于人类读者以及Make,我想您有时需要将文件目标作为虚假目标的先决条件。 那么,这些应该是订单目标吗? 据我所知,在这种情况下,order only和not的唯一区别在于它们是否出现在$^或$|中,因此这可能取决于您在该问题上想要的行为,分别是您想要表达的依赖类型 我说的对吗?(如果没有一个或另一个明确的理由,)是否有任何理由选择一个而不是另一个(仅订单或不订单) 我猜你有

文章提到“没有文件目标应该是.PHONY的先决条件。”

我想你可以把它改写成“不要声明文件目标是假的”

为了表达依赖关系,对于人类读者以及Make,我想您有时需要将文件目标作为虚假目标的先决条件。 那么,这些应该是订单目标吗? 据我所知,在这种情况下,order only和not的唯一区别在于它们是否出现在$^或$|中,因此这可能取决于您在该问题上想要的行为,分别是您想要表达的依赖类型

我说的对吗?(如果没有一个或另一个明确的理由,)是否有任何理由选择一个而不是另一个(仅订单或不订单)

我猜你有时需要文件目标作为虚假目标的先决条件

事实上,大多数时候。考虑“标准”的东西:

但是“不要声明文件目标是假的/没有文件目标应该是.PHONY的先决条件”是完全不同的事情。这意味着
。虚假:myprog
是不好的,应该避免。原因是:(1)无条件触发异常的
myprog
重建;(2) 它可能会让人误以为
myprog
不是一个文件

如果您需要在执行
make-B myprog
后强制重新生成
myprog
。如果每次运行make时确实需要重新生成,则可以执行以下操作:

myprog: $(OBJECTS) FORCE
    ...
FORCE:;
或者类似的

据我所知,在这种情况下,order only和not的唯一区别在于它们是否出现在$^或中$|

只有订单的先决条件很少用于GNU扩展。没有必要把它们放进去只是为了表明左侧的“假东西”无论如何都会被重建。因此,没有人编写过
all:|myprog
,尽管它与
all:myprog
一样有效

我猜你有时需要文件目标作为虚假目标的先决条件

事实上,大多数时候。考虑“标准”的东西:

但是“不要声明文件目标是假的/没有文件目标应该是.PHONY的先决条件”是完全不同的事情。这意味着
。虚假:myprog
是不好的,应该避免。原因是:(1)无条件触发异常的
myprog
重建;(2) 它可能会让人误以为
myprog
不是一个文件

如果您需要在执行
make-B myprog
后强制重新生成
myprog
。如果每次运行make时确实需要重新生成,则可以执行以下操作:

myprog: $(OBJECTS) FORCE
    ...
FORCE:;
或者类似的

据我所知,在这种情况下,order only和not的唯一区别在于它们是否出现在$^或中$|


只有订单的先决条件很少用于GNU扩展。没有必要把它们放进去只是为了表明左侧的“假东西”无论如何都会被重建。所以没有人曾经写过<代码>所有的:MyPROG,虽然它和“代码”一样好:MyPROG < /P>谢谢。既然你提到了力,我明白为什么人们会考虑声明文件目标伪。谢谢,现在你提到了力,我明白为什么人们会考虑声明文件目标假的。