GNU make 不匹配最短的词干
GNU make not matching shortest stem
为什么这个 makefile 中没有匹配最短的词干?
foo/%/baz:
@echo "Prereq - stem $*"
foo/%/baz/thing.txt: foo/%/baz
@echo "Good match - stem $*"
foo/%:
@echo "Bad match - stem $*"
这是输出:
> make foo/bar/baz/thing.txt
Bad match - stem bar/baz/thing.txt
我希望 make
匹配更具体(较短的词干)foo/%/baz/thing.txt
而不是 foo/%
。
这不是版本 3.81
问题(其他两个类似的 SO 问题就是这种情况)。
- when multiple pattern rules match a target
> make --version
GNU Make 4.2.1
我可以通过以下任一方式实现预期的行为:
删除更通用的规则
foo/%/baz:
@echo "Prereq - stem $*"
foo/%/baz/thing.txt: foo/%/baz
@echo "Good match - stem $*"
> make foo/bar/baz/thing.txt
Prereq - stem bar
Good match - stem bar
正在从更具体的规则中删除先决条件
foo/%/baz:
@echo "Prereq - stem $*"
foo/%/baz/thing.txt:
@echo "Good match - stem $*"
foo/%:
@echo "Bad match - stem $*"
> make foo/bar/baz/thing.txt
Good match - stem bar
我很困惑为什么添加到特定规则的先决条件会导致匹配一般规则。
抱歉,当我建议您提交错误时,我没有足够仔细地阅读您的问题,并且很困惑这是应该匹配的先决条件,但您想知道为什么初始规则不匹配。
这不是错误:这是由于文档中的 this statement:
Note however, that a rule whose prerequisites actually exist or are mentioned always takes priority over a rule with prerequisites that must be made by chaining other implicit rules.
真的很抱歉,完全是我没看仔细:(.
为什么这个 makefile 中没有匹配最短的词干?
foo/%/baz:
@echo "Prereq - stem $*"
foo/%/baz/thing.txt: foo/%/baz
@echo "Good match - stem $*"
foo/%:
@echo "Bad match - stem $*"
这是输出:
> make foo/bar/baz/thing.txt
Bad match - stem bar/baz/thing.txt
我希望 make
匹配更具体(较短的词干)foo/%/baz/thing.txt
而不是 foo/%
。
这不是版本 3.81
问题(其他两个类似的 SO 问题就是这种情况)。
- when multiple pattern rules match a target
> make --version
GNU Make 4.2.1
我可以通过以下任一方式实现预期的行为:
删除更通用的规则
foo/%/baz:
@echo "Prereq - stem $*"
foo/%/baz/thing.txt: foo/%/baz
@echo "Good match - stem $*"
> make foo/bar/baz/thing.txt
Prereq - stem bar
Good match - stem bar
正在从更具体的规则中删除先决条件
foo/%/baz:
@echo "Prereq - stem $*"
foo/%/baz/thing.txt:
@echo "Good match - stem $*"
foo/%:
@echo "Bad match - stem $*"
> make foo/bar/baz/thing.txt
Good match - stem bar
我很困惑为什么添加到特定规则的先决条件会导致匹配一般规则。
抱歉,当我建议您提交错误时,我没有足够仔细地阅读您的问题,并且很困惑这是应该匹配的先决条件,但您想知道为什么初始规则不匹配。
这不是错误:这是由于文档中的 this statement:
Note however, that a rule whose prerequisites actually exist or are mentioned always takes priority over a rule with prerequisites that must be made by chaining other implicit rules.
真的很抱歉,完全是我没看仔细:(.