Makefile 如何始终使用最具体的隐式规则?

Makefile 如何始终使用最具体的隐式规则?,makefile,gnu-make,Makefile,Gnu Make,GNU Make手册说,选择了最“具体”的隐式规则,这是一件好事。除了如果有一条规则不需要制定隐含的先决条件,那么即使它更“一般”,也会选择它。见: 总之,应该始终选择最具体的规则,不管是否有0个隐式预请求,尤其是这些先决条件是否已经存在。但我不想在这里问“为什么” 相反,有人能向我建议,如何强迫人们做出想要的行为。不管怎样,我总是想要最具体的规则。有没有办法强迫你这么做?好吧,我可以这样做: %.o: %.dummy @echo general %.dummy: ; 我只是不喜欢这

GNU Make手册说,选择了最“具体”的隐式规则,这是一件好事。除了如果有一条规则不需要制定隐含的先决条件,那么即使它更“一般”,也会选择它。见:

总之,应该始终选择最具体的规则,不管是否有0个隐式预请求,尤其是这些先决条件是否已经存在。但我不想在这里问“为什么”


相反,有人能向我建议,如何强迫人们做出想要的行为。不管怎样,我总是想要最具体的规则。有没有办法强迫你这么做?

好吧,我可以这样做:

%.o: %.dummy
    @echo general

%.dummy: ;

我只是不喜欢这种事情。有没有一种不那么丑陋的方式

问题是make总是使用最直接的规则(最少的中间步骤数)作为第一优先级。使用更具体的模式规则(与更一般的模式规则相比)是次要的,因此只有具有相同中间步骤数的链才有意义。我不知道有什么方法可以改变这些优先级。您使用的是什么版本的make?规则的选择在GNU make 3.81和3.82之间更改。“最具体”的规则选择是我认为的3.82行为,而不是3.81行为。如果在makefile中颠倒这两个规则的顺序,您会得到预期的行为吗(如果您使用的是3.81)?
%.o: %.dummy
    @echo general

%.dummy: ;