首先,请注意,模式匹配的“最短茎”方法是在GNU make 3.82中引入的。如果您使用的是GNU make 3.8 1,那么您的make版本使用的是“第一次匹配”的旧方法。如果可能的话,最好阅读发行版附带的文档,而不是web文档,因为web文档适用于GNU make的最新版本。GNU make 3.81于2006年4月发布……这已经很旧了。
然而,您提供的示例实际上确实按照您希望的方式工作:
src/%_bar.o : src/%_bar.c ; @echo shorter: $*
src/%.o : src/%.c ; @echo longer: $*
all: src/foo_bar.o
$ make-3.81
shorter: foo
$ make-3.82
shorter: foo
我怀疑当你在这里提出问题时,你没有使用你在真实环境中使用的代码。在那种环境下,你必须有更短的模式
之后
较长的图案,如下所示:
src/%.o : src/%.c ; @echo longer: $*
src/%_bar.o : src/%_bar.c ; @echo shorter: $*
all: src/foo_bar.o
$ make-3.81
longer: foo_bar
$ make-3.82
shorter: foo
提问时,确保问题中的简化示例准确反映真实情况非常重要。