make - 为啥有些模式规则被标记为隐式?

Posted

技术标签:

【中文标题】make - 为啥有些模式规则被标记为隐式?【英文标题】:make - Why are some pattern rules marked implicit?make - 为什么有些模式规则被标记为隐式? 【发布时间】:2013-06-20 19:10:13 【问题描述】:

我正在研究一个头文件依赖 Makefile。这是代码的一个非常简化的版本:

cdeps/%.mk:: %
    mkdir -p $(@D)
    ./cdeps.sh cdeps $* .

%.cpp.o: %.cpp cdeps/%.cpp.mk
    g++ -c $< -o $@ -I.

include $(shell find cdeps -type f 2>/dev/null)

a.cpp 包括 b.cpp; cdeps.sh 为包含的文件添加对其他 cdeps/%.mk 的依赖项。

所以当我“制作 a.cpp.o”时,首先创建 cdeps/a.cpp.mk,然后创建 a.cpp.o(完全符合预期)。 然后 cdeps/a.cpp.mk 被删除。为什么?

【问题讨论】:

【参考方案1】:

您可以在此处阅读有关隐式规则和删除目标的时间以及如何防止这种情况的信息:http://www.gnu.org/software/make/manual/html_node/Chained-Rules.html

【讨论】:

它没有说明如何删除显式规则的输出。 它说:第二个区别是,如果 make 确实创建 b 以更新其他内容,它会在不再需要 b 后删除它。因此,在 make 之前不存在的中间文件在 make 之后也不存在。 make 通过打印 rm -f 命令向您报告删除情况,显示正在删除的文件。

以上是关于make - 为啥有些模式规则被标记为隐式?的主要内容,如果未能解决你的问题,请参考以下文章

Make -- 改变系统范围的隐式规则

make--隐式规则 路径搜索及实例

makefile--隐式规则

为隐式 Runge-Kutta 方法编写函数(四阶)

makefile(06)_隐式规则

Visual Studio 2012 JavaScript Intellisense 参考组恢复为隐式 (Windows)