0

我有 2 个文件,filea 和 fileb,并且想要生成 filec。

我的 Makefile 看起来像这样

f%ec: f%eb

f%ec: f%ea
    cat $^ > $@

然而,输入 make 的效果只是:

cat filea > filec

也就是说,fileb 不是 filec 的先决条件。当不使用 % 符号时,即 Makefile 是

filec: fileb

filec: filea
    cat $^ > $@

产生的动作是

cat filea fileb > filec

为什么?以及如何修改第一个 Makefile 以获得预期的结果?

4

1 回答 1

1

在第二个生成文件中:

filec: fileb

filec: filea
    cat $^ > $@

有两条规则filec,其中只有一条有命令,因此 Make 结合了 prereqs 列表并运行带有命令的一条。在第一个生成文件中:

f%ec: f%eb

f%ec: f%ea
    cat $^ > $@

有两种不同的模式规则可以匹配filec,所以 Make 必须选择一个(它没有意识到它可以同时应用这两种规则,而且原则上它们都可以有命令)。由于一个缺少命令,它选择另一个。获得所需行为的最简单方法是组合规则:

f%ec: f%ea f%eb
    cat $^ > $@
于 2012-10-20T15:23:06.810 回答