2012-10-20 65 views
0

我有2個文件,filea和fileb,並且想要生成filec。GNU make:詞幹匹配和多重依賴關係

我的Makefile看起來像這樣

f%ec: f%eb 

f%ec: f%ea 
    cat $^ > [email protected] 

然而,打字化妝的效果僅僅是:

cat filea > filec 

也就是說,FILEB不是filec的先決條件。當不使用%的跡象,那就是當的Makefile

filec: fileb 

filec: filea 
    cat $^ > [email protected] 

所產生的作用是

cat filea fileb > filec 

爲什麼呢?如何修改第一個Makefile以獲得預期的結果?

回答

1

在第二生成文件:

filec: fileb 

filec: filea 
    cat $^ > [email protected] 

有兩種規則filec,只有其中之一有命令,所以要結合prereqs的名單,並運行一個與命令。在第一個生成文件:

f%ec: f%eb 

f%ec: f%ea 
    cat $^ > [email protected] 

有兩種不同的模式規則可能匹配filec,所以要一直選擇一個(它不知道它可以在同一時間同時適用,並在原則上它們都可以有命令)。由於缺乏命令,它會選擇另一個命令。獲得所需行爲的最簡單方法是合併規則:

f%ec: f%ea f%eb 
    cat $^ > [email protected]