我有一个类似这样的makefile:
foo
据我理解make的文档,从隐式规则创建的所有文件都被视为中间文件,但对于模式规则则不然,但是我用{{1}创建的.INTERMEDIATE: gen0.tmp gen1.tmp
.PHONY: %_test
%_test: tests/%.so
ln -fs $< test.so
tests/%.so: gen.o test_src/%.c
cc -shared $^ -o $@
gen.c: gen0.tmp gen1.tmp
cat $^ > $@
gen%.tmp:
seds and awks and non-relevant stuff
正在使用其他中间文件删除规则,除非它在调用make之前存在。这有什么不对?
另外
.so
不能工作和
%_test
确实如此,但明确标记为.SECONDARY: tests/%.so
的目标不会被删除,我也不认为将我的主要目标标记为.SECONDARY:
是好的做法。
PS:我使用make version 3.81
答案 0 :(得分:1)
我不理解您的陈述从隐式规则创建的所有文件都被视为中间文件,但对于模式规则则不然。
模式规则 IS a(类型)隐式规则。绝对是由于模式规则而创建的目标可以被认为是中间的。