makefile - 你能明确声明一个提到的文件 .INTERMEDIATE 吗?
问题描述
在这个答案的评论中,GNU Make 的当前维护者 MadScientist 在明确声明的 .INTERMEDIATE 目标上说:
[a file] 只需在任何规则(而非配方)中明确提及,即可取消其获得中间状态的资格。
另一方面,GNU make 手册说
但是,您可以通过将文件列为特殊目标 .INTERMEDIATE 的先决条件来将文件显式标记为中间文件。即使以其他方式明确提及文件,这也会生效。
哪个是对的,或者我做错了什么?
解决方案
有一个误解:上述两个陈述都是正确的,但是您应用的上下文(在显式声明的 .INTERMEDIATE 目标上)不正确;该声明是对我回答的评论中提出的问题的回应,该问题与原始问题不同。
在没有特殊覆盖的情况下,如果目标完全由 make 推断(未在 makefile 中明确列出,仅通过隐式规则搜索发现),则它有资格成为中间目标。
如果目标在 makefile 中列为目标或先决条件,则默认情况下它没有资格成为中间目标。即使如此,.INTERMEDIATE
特殊形式也允许您声明提到的目标是中间的。
为确保目标不是中间目标,只需在 makefile 中将其作为目标或某个目标的先决条件提及就足够了(不必是在调用 make 期间实际构建的目标)。
为了确保一个目标是中间的,它要么不应该被提及,要么应该被声明为.INTERMEDIATE
.
推荐阅读
- selenium - 如何在硒中移动到兄弟姐妹
- java - Spring Boot,Spring Security 返回状态 401 而不是 404 表示“未找到 HTTP 请求的映射”
- excel - 替换预定义列表中的整个单词
- c# - 如何在 netcore 中间件中获得正确的响应体?
- sql - 如何避免 SELECT 语句中用于排序的额外列到最终输出?
- swift5.1 - 如果从其他文件访问,则属性包装值给出非可选类型
- reactjs - create react app 正在打字稿中创建项目
- java - 同时使用 OnTouchListener 和 OnClickListener
- jquery - 提交按钮被点击时无作用
- javascript - 在 Firefox 扩展中的两个后台脚本之间共享变量