Makefile make-为什么一些模式规则被标记为隐式?

Makefile make-为什么一些模式规则被标记为隐式?,makefile,gnu-make,Makefile,Gnu Make,我正在处理头文件依赖项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) cdeps/%.mk::% mkdir-p$(@D) ./cdeps.sh cdeps$

我正在处理头文件依赖项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)
cdeps/%.mk::%
mkdir-p$(@D)
./cdeps.sh cdeps$*。
%.cpp.o:%.cpp cdeps/%.cpp.mk
g++-c$<-o$@-I。
include$(shell查找CDEP-类型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。为什么?

您可以在这里了解隐式规则和删除目标的时间以及如何防止这种情况:

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