Makefile规则" foo:bar:baz"

时间:2015-02-10 11:07:02

标签: makefile prerequisites

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

foo: bar : baz

我了解foo是一个目标,barbaz是先决条件,但为什么barbaz之间还有另一个冒号 - 什么&#39那个冒号的含义是什么?

2 个答案:

答案 0 :(得分:4)

您正在考虑的功能是static pattern rule,您提供的语法:foo : bar : baz是非法的; bar部分必须模式(也就是说,它必须包含%个字符。)

Tripleee给出了一个合理的解释,除了声明我们构建foo时,bar依赖于baz 有些令人困惑。静态模式规则的含义是,对于目标中的每个单词,创建一个新的显式规则,其中目标是将模式模式应用于具有先决条件的该单词的结果先决条件

答案 1 :(得分:1)

一般语法是

targets: pattern: prerequisites

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

更有用和正确的例子是

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

表示如果您构建OBJS之一,则其.o文件取决于ick.h