【问题标题】:GNU make not matching shortest stemGNU make 不匹配最短的词干
【发布时间】:2020-06-21 05:14:41
【问题描述】:

为什么这个 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 问题一样)。

> 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

我很困惑为什么添加到特定规则的前置条件会导致匹配一般规则。

【问题讨论】:

标签: makefile gnu-make


【解决方案1】:

抱歉,当我建议您提交错误时,我没有仔细阅读您的问题,并且很困惑这是应该匹配的先决条件,但您想知道为什么初始规则不匹配。

这不是错误:这是由于文档中的this statement

但是请注意,先决条件实际存在或被提及的规则始终优先于具有先决条件的规则,而先决条件必须通过链接其他隐式规则来实现。

我真的很抱歉,这完全是我没有仔细阅读的坏事:(。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2012-03-16
  • 1970-01-01
  • 2021-05-11
  • 2017-01-20
相关资源
最近更新 更多