make - 模式规则目标被错误地视为中间

时间:2015-07-09 07:21:07

标签: makefile

我有一个类似这样的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

1 个答案:

答案 0 :(得分:1)

我不理解您的陈述从隐式规则创建的所有文件都被视为中间文件,但对于模式规则则不然。

模式规则 IS a(类型)隐式规则。绝对是由于模式规则而创建的目标可以被认为是中间的。