GNU make:词干匹配和多个依赖项

时间:2012-10-20 09:09:08

标签: makefile gnu-make

我有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以获得预期的结果?

1 个答案:

答案 0 :(得分:1)

在第二个makefile中:

filec: fileb

filec: filea
    cat $^ > $@

filec有两个规则,其中只有一个有命令,因此Make组合了先决条件列表并使用命令运行。在第一个makefile中:

f%ec: f%eb

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

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

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