首页 > 解决方案 > 你能明确声明一个提到的文件 .INTERMEDIATE 吗?

问题描述

这个答案的评论中,GNU Make 的当前维护者 MadScientist 在明确声明的 .INTERMEDIATE 目标上说:

[a file] 只需在任何规则(而非配方)中明确提及,即可取消其获得中间状态的资格。

另一方面,GNU make 手册

但是,您可以通过将文件列为特殊目标 .INTERMEDIATE 的先决条件来将文件显式标记为中间文件。即使以其他方式明确提及文件,这也会生效。

哪个是对的,或者我做错了什么?

标签: makefilegnu-make

解决方案


有一个误解:上述两个陈述都是正确的,但是您应用的上下文(在显式声明的 .INTERMEDIATE 目标上)不正确;该声明是对我回答的评论中提出的问题的回应,该问题与原始问题不同。

在没有特殊覆盖的情况下,如果目标完全由 make 推断(未在 makefile 中明确列出,仅通过隐式规则搜索发现),则它有资格成为中间目标。

如果目标在 makefile 中列为目标或先决条件,则默认情况下它没有资格成为中间目标。即使如此,.INTERMEDIATE特殊形式也允许您声明提到的目标是中间的。

为确保目标不是中间目标,只需在 makefile 中将其作为目标或某个目标的先决条件提及就足够了(不必是在调用 make 期间实际构建的目标)。

为了确保一个目标中间的,它要么不应该被提及,要么应该被声明为.INTERMEDIATE.


推荐阅读