请考虑以下makefile
(和任何hi.c
):
.PHONY: analyze-%
hi: hi.c
gcc -o $@ $<
%.json: %
touch $@ # actually created by analysis-tool
analyze-%: %.json # why does this not work?
正如我在makefile
中的评论所指出的那样,隐式规则不起作用:
$ make analyze-hi
make: *** No rule to make target 'analyze-hi'. Stop.
它只有在将其转换为静态模式规则后才能工作:
...
analyze-hi: analyze-%: %.json
为什么会这样? make
是否应该能够自己解决这个问题,而不必我显式地写出完整的目标名称?据我所知,没有任何歧义。
答案 0 :(得分:1)
模式规则必须具有配方。如果他们没有配方,那么他们就没有创建模式规则,而是要取消一个规则。
请参见https://www.gnu.org/software/make/manual/html_node/Canceling-Rules.html
与它的名称所暗示的相反,静态模式规则实际上并不是在创建隐式规则(模式或后缀规则)。它只是基于模式来创建显式规则。明确的规则不必包含配方。