- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 gnu-make-3.81 Makefile 中,我希望定义两个隐式规则,以便更具体的第一个规则优先于更通用的第二个规则:
src/%_bar.o : src/%_bar.c
$(CC) -Wall -Wno-unused-but-set-variable -c $^ -o $@
src/%.o : src/%.c
$(CC) -Wall -c $^ -o $@
我遇到的问题是 foo_bar.c 代表自动生成的代码,该代码会触发带有 -Wall 的警告,我希望抑制该警告,因此第一条规则旨在捕获这种特殊情况。
根据make's manual :
It is possible that more than one pattern rule will meet these criteria. In that case, make will choose the rule with the shortest stem (that is, the pattern that matches most specifically).
我认为文件名 src/foo_bar.o
是这样的,第一条规则将生成词干 foo
,第二个将生成 foo_bar
。前者是最短的,所以我希望它适用。然而情况似乎并非如此,第二条规则由 make 选择并执行。运行make -d
甚至没有显示与词干 foo
匹配的尝试- 仅foo_bar
已考虑。
如果我进行以下更改,通过缩短 src/
中的前缀来故意延长第二条规则的主干。至sr
,仍然选择第二条规则:
src/%_bar.o : src/%_bar.c
$(CC) -Wall -Wno-unused-but-set-variable -c $^ -o $@
sr%.o : sr%.c
$(CC) -Wall -c $^ -o $@
我无法将其与 make 文档协调一致。
此外,如果我删除 src/
完全添加前缀,选择第二条规则:
src/%_bar.o : src/%_bar.c
$(CC) -Wall -Wno-unused-but-set-variable -c $^ -o $@
%.o : %.c
$(CC) -Wall -c $^ -o $@
虽然这解决了我的问题,但它实际上不合适,因为它覆盖/与我需要保留的当前目录上的另一个隐式规则交互:
%.o : %.c
# do something else
我的问题是为什么 make
在这种情况下,行为方式与文档一致吗?如果是这样,是否有更好的方法来指定更专门的隐式规则?
最佳答案
首先,请注意模式匹配的“最短词干”方法是在 GNU make 3.82 中引入的。如果您使用的是 GNU make 3.81,那么您的 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
提出问题时,确保问题中的简化示例准确反射(reflect)真实情况非常重要。
关于Makefile 隐式规则匹配 - 前缀长度不影响匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31826383/
我需要在 nginx-ingress 版本上允许来自多个来源的请求:http://localhost:4200、http://localhost:4242 等1.7.1.但我无法对多个来源执行此操作,
我正在部署我使用 APIGILITY 开发的 API到 IIS。由于 IIS 不支持 .htaccess,我试图从 .htaccess 文件的内容创建 web.config 文件。我使用 IISv7.
我正在尝试更改上面 css 样式中的“宽度”规则。在“inspect element”中你可以看到宽度是1008px。我不希望它是 1008px 但它不会让我在 css 样式中更改它你可以看到它被“删
外部css赋值有2种方法,我用的是第一种;大多数网站使用第二种方法。我想知道我是否做错了! 第一种方法: 为几乎每个 css 规则创建一个类并在任何地方使用它们。 blah blah .f_
RDF使用 WEB 标识符 (URIs) 来标识资源,使用属性和属性值来描述资源 RDF 资源、属性和属性值 RDF使用 WEB 标识符来标识事物,并通过属性和属性值来描述资源。 关于资源、属性
我想挖掘特定的 rhs 规则。文档中有一个示例证明这是可能的,但仅适用于特定情况(如下所示)。先来一个数据集来说明我的问题: input {b=100002} 0.2500000 0.250000
我想让 nginx 从网站根目录(:http://localhost:8080/)提供一个静态文件,但它为我的代理通行证提供服务;它提供“/”规则而不是“=/”。 这是我的 nginx 配置的样子:
根据gnu make documentation , 如果一个规则通过一次调用生成多个目标(例如,一个配方执行一个带有多个输出文件的工具),你可以使用 '&:' 规则语法来告诉 make。但是,当在多
我已阅读Firebase Documentation并且不明白什么是 .contains()。 以下是文档中 Firebase 数据库的示例规则: { "rules": { "rooms"
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
我正在尝试做一些多态性练习,但我无法弄清楚这种多态性是如何工作的。我没有找到任何关于这种练习的深入信息。希望大家能给我一些解释。 练习1: class Top { public void m(
为了调试复杂的 XSLT 转换,我将其分为几个部分:首先构建 %.1.xml,然后使用它构建 %.2.xml ,最后构建 %.3.xml。一切正常,但如果我要求 Make 构建最后一个,Make 总是
我尝试了 hacerrank 的 slove 练习 Click我不知道如何添加这些规则: ► 它可以包含 4 个一组的数字,并用一个连字符“-”分隔。 ► 不得有 4 个或更多连续重复数字。 这是我的
我正在尝试编写一个小测验,我希望“再试一次”按钮遵循与“else”之前的“if”语句相同的规则 using System; public class Program { public stat
在我的 Spring/Boot Java 项目中,我有一组服务方法,例如以下一个: @Override public Decision create(String name, String descr
我正在阅读 Covariant virtual function .上面写着 假设 B::f 覆盖了虚函数 A::f。如果满足以下所有条件,A::f 和 B::f 的返回类型可能不同: 1) The
我工作的公司想要分发(在公共(public)链接中)具有内部签名的应用程序。我很确定 Apple 否认这种事情,但我在官方文档/契约(Contract)中没有找到任何相关信息。 有谁知道它到底是如何工
我是 CSS 新手。我观察到一个奇怪的 CSS 行为,其中一个元素具有以下 CSS 属性 .container .header{ color: #FFFFFF; font-size: 2em;
这个问题在这里已经有了答案: Is there a CSS selector for elements containing certain text? (21 个答案) 关闭 7 年前。
我有以下 CSS: workoutcal.css: .errorlist{ color:red; } 以下基本模板: base.html: {% load static %} {
我是一名优秀的程序员,十分优秀!