Makefile 将make-pattern规则目标错误地视为中间对象

Makefile 将make-pattern规则目标错误地视为中间对象,makefile,Makefile,我有一个makefile,它可以执行以下操作: .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

我有一个makefile,它可以执行以下操作:

.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    
不起作用,而且

.SECONDARY:
是的,但随后明确标记为
。中间
的目标不会被删除,我认为将我的主要目标标记为
。次要
不是一个好的做法


PS:我使用makeversion3.81

我不理解您的说法,所有根据隐式规则创建的文件都被视为中间文件,但对于模式规则来说并非如此


模式规则是一种(类型的)隐式规则。根据模式规则创建的目标绝对可以被视为中间目标。

您尝试过使用吗?它甚至应该起作用。它仍然只是一个解决办法。另一个好的解决方法是删除
%\u test
规则,并在`test/%中执行
ln
。我不是在寻找一种保存中间文件的方法,我在寻找一种使文件非中间文件的方法,因为我可能理解错了。我认为隐式的意思是makefile中没有的东西,但是可以工作。显式规则是指目标为实际文件的规则;这包括静态模式规则。隐式规则是make根据规则计算目标的规则:它包括后缀规则和模式规则。make内部知道的、不在makefile中的规则列表称为内置规则。
.SECONDARY: