gpt4 book ai didi

Makefile:隐式规则先决条件不起作用?

转载 作者:行者123 更新时间:2023-12-02 00:11:50 25 4
gpt4 key购买 nike

如果我创建一个带有先决条件(但没有配方)的隐式规则,那么似乎没有遵守依赖关系。另一方面,如果我在定义配方的 block 中定义了先决条件,或者如果我指定了目标特定实例的依赖项,它似乎确实有效。我有以下 Makefile (GNU make 3.81)

all:  foo.a foo.b bar.b bar.c

dep1:
@echo "running $@"

%.a: dep1

%.a:
@echo "running $@ (depends on: $^)"

bar.b: dep1

%.b: dep1
@echo "running $@ (depends on: $^)"

bar.c: dep1

bar.c:
@echo "running $@ (depends on: $^)"

如果我运行 make,我会得到:

~/tmp/tmp5> make
running foo.a (depends on: )
running dep1
running foo.b (depends on: dep1)
running bar.b (depends on: dep1)
running bar.c (depends on: dep1)

似乎即使我有 %.a 依赖于 dep1foo.a 也可以在没有 dep1 的情况下构建 正在构建中。这是 make 中的错误,还是有此行为的原因?

谢谢,

约翰

最佳答案

具有相同目标的模式规则不会像非模式规则那样组合成单个规则。当您有两个针对同一目标的非模式规则时,它们会组合成一个规则,其中包含两个规则的所有依赖项以及具有操作的规则中的操作(并且两个规则都具有操作是错误的) .使用模式规则,这不会发生——它们被视为两个完全独立的规则,其中任何一个都可用于更新目标。

当您想到内置模式规则时,原因就很明显了——%.o 有多个规则,可以用多种语言编译源文件。如果将它们全部组合成一个规则,它根本行不通。

关于Makefile:隐式规则先决条件不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14816345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com