Makefile 规则 "foo : bar : baz"

Makefile rule "foo : bar : baz"

指定如下规则是什么意思?

foo: bar : baz

我知道 foo 是目标,barbaz 是先决条件,但为什么 barbaz 之间还有另一个冒号 - 什么那个冒号的意思?

一般语法是

targets: pattern: prerequisites

所以这个 - 过于简单化 - 你的例子说,基本上,当我们构建 foo 时,bar 取决于 baz。但是,第二个参数需要是一个模式规则,所以你的例子实际上是一个语法错误。

一个更有用和正确的例子是

$(OBJS): %.o: ick.h

这表示如果您正在构建 OBJS 之一,他们的 .o 文件取决于 ick.h

你想的特征是static pattern rule,你给的语法:foo : bar : baz是非法的; bar 部分 必须 模式 (即,它必须包含 % 字符)。

Tripleee 给出了合理的解释,除了when we build foo, bar depends on baz 的说法有些令人费解。静态模式规则的意思是,对于 targets 中的每个单词,创建一个新的显式规则,其中目标是应用模式 pattern 的结果用先决条件 prerequisites.