Makefile 不使用GNU make-implicit规则,但使用静态模式规则

Makefile 不使用GNU make-implicit规则,但使用静态模式规则,makefile,gnu-make,Makefile,Gnu Make,考虑以下makefile(以及任何hi.c): 只有将其转换为静态模式规则后,它才能工作: ... analyze-hi: analyze-%: %.json 为什么会这样?难道make不应该自己解决这个问题,而不需要我显式地写出完整的目标名称吗?没有歧义或任何东西(据我所知)。模式规则必须有配方。如果他们没有配方,那么他们不是在创建模式规则,而是在取消一个 看 静态模式规则与其名称所暗示的相反,实际上并不是在创建隐式规则(模式或后缀规则)。它只是基于模式创建显式规则。明确的规则不一定要有食谱

考虑以下
makefile
(以及任何
hi.c
):

只有将其转换为静态模式规则后,它才能工作:

...
analyze-hi: analyze-%: %.json

为什么会这样?难道
make
不应该自己解决这个问题,而不需要我显式地写出完整的目标名称吗?没有歧义或任何东西(据我所知)。

模式规则必须有配方。如果他们没有配方,那么他们不是在创建模式规则,而是在取消一个


静态模式规则与其名称所暗示的相反,实际上并不是在创建隐式规则(模式或后缀规则)。它只是基于模式创建显式规则。明确的规则不一定要有食谱。

有趣的是,我没想到这就是原因。我现在在规则末尾使用分号,因此它是'analyze-%:%.json;'(可在此处找到:)。这是一个非常干净的解决方案。
$ make analyze-hi
make: *** No rule to make target 'analyze-hi'.  Stop.
...
analyze-hi: analyze-%: %.json