Makefile GNU make:茎匹配和多个依赖项

Makefile GNU make:茎匹配和多个依赖项,makefile,gnu-make,Makefile,Gnu Make,我有两个文件,filea和fileb,我想生成filec 我的Makefile如下所示 f%ec: f%eb f%ec: f%ea cat $^ > $@ 然而,键入make的效果只是: cat filea > filec 也就是说,fileb不是filec的先决条件。当不使用%符号时,即生成文件 filec: fileb filec: filea cat $^ > $@ 由此产生的行动是 cat filea fileb > filec 为什么

我有两个文件,filea和fileb,我想生成filec

我的Makefile如下所示

f%ec: f%eb

f%ec: f%ea
    cat $^ > $@
然而,键入make的效果只是:

cat filea > filec
也就是说,fileb不是filec的先决条件。当不使用%符号时,即生成文件

filec: fileb

filec: filea
    cat $^ > $@
由此产生的行动是

cat filea fileb > filec

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

在第二个Makefile中:

filec: fileb

filec: filea
    cat $^ > $@
f%ec: f%eb

f%ec: f%ea
    cat $^ > $@
对于
filec
,有两条规则,其中只有一条有命令,因此Make组合了prereq列表,并使用命令运行该规则。在第一个makefile中:

filec: fileb

filec: filea
    cat $^ > $@
f%ec: f%eb

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

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