GNU make - 不使用隐式规则,但使用静态模式规则
GNU make - implicit rule is not used, but static pattern rule is
考虑以下 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
不应该自己解决这个问题,而无需我明确写下完整的目标名称吗?没有歧义或任何东西(据我所知)。
模式规则必须有配方。如果他们没有食谱,那么他们就不会创建模式规则,他们会取消一个。
见https://www.gnu.org/software/make/manual/html_node/Canceling-Rules.html
静态模式规则与其名称所暗示的相反,实际上并不是在创建隐式规则(模式或后缀规则)。它正在创建 explicit 规则,只是基于一种模式。明确的规则不必有食谱。
考虑以下 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
不应该自己解决这个问题,而无需我明确写下完整的目标名称吗?没有歧义或任何东西(据我所知)。
模式规则必须有配方。如果他们没有食谱,那么他们就不会创建模式规则,他们会取消一个。
见https://www.gnu.org/software/make/manual/html_node/Canceling-Rules.html
静态模式规则与其名称所暗示的相反,实际上并不是在创建隐式规则(模式或后缀规则)。它正在创建 explicit 规则,只是基于一种模式。明确的规则不必有食谱。