在this answer的评论中,MadScientist(现为GNU Make的维护者)对明确声明的.INTERMEDIATE目标说:
[文件]在任何规则(不是配方)中都必须明确提及,以取消其具有中间状态的资格。
另一方面,the GNU make manual说
但是,您可以通过将文件列出为特殊目标.INTERMEDIATE的先决条件来将其明确标记为中间文件。即使以其他方式明确提及该文件,此操作也将生效。
是对的还是我错了?
答案 0 :(得分:2)
有一个误解:以上两个陈述都是正确的,但是您应用的上下文(在明确声明的.INTERMEDIATE目标上的 )是不正确的;该声明是对我对答案的评论中提出的一个问题的回应,这与原始问题有所不同。
在没有特殊替代的情况下,如果目标完全由make推断(没有在makefile中明确列出,而是仅通过隐式规则搜索发现),则有资格成为中间对象。
如果目标在makefile中被列为目标或先决条件,则默认情况下它不符合中间条件。 .INTERMEDIATE
特殊形式使您可以声明所提到的目标是中间目标。
要确保目标不是 中间对象,只需在makefile中将该目标作为目标或某个目标的先决条件就足够了(不必一定是在构建过程中实际构建的目标)调用make。)
为确保目标是中间对象,不应提及它,否则应将其声明为.INTERMEDIATE
的先决条件。