我有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以获得预期的结果?
答案 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 $^ > $@