2012-03-29 125 views
1

有一個耗時的步驟,可以使一堆文件變平。makefile,用於多輸入的規則

基本上,我想這是有效的語法

%.out: %.input1 %.input2 
    merge $<1 $<2 [email protected] 

doit: project.out 
    # project.out merged 

我根本不是一個makefile的專家,但我喜歡用.SULFFIXS這樣做,當只有兩個文件,將是巨大的適應這兩個輸入,或爲將來使用兩個輸出...

.SULFFIX: .in.out 
.in.out: 
    dosomething $< [email protected] 
doit: project.out 

GNU使3.81

我已經找到了如何與多個輸出的規則進行了幾次討論,但沒有與服務器al輸入。

回答

2
%.out: %.input1 %.input2 
    merge $<1 $<2 [email protected] 

有在makefile規則沒有$1$2自動變量,但是,沒有$^這是所有先決條件的列表。由於規則只有兩個先決條件,因此它擴展爲%.input1 %.input2,或者更準確地說,是$*.input1 $*.input2。因此:

%.out: %.input1 %.input2 
    merge $^ [email protected] 

應該足夠了。

.SULFFIXES IMO並不是非常有用,因爲它使用了隱式規則定義,而這些隱式規則定義是無法看到和更改的。

[更新]

至於doit目標,以防止其在執行每一個你可能想改變規則的時間命令:

doit: project.out 
    # project.out merged 
    touch [email protected] 
+0

好點,忘了$ ^。 ..如果我需要的命令是第一個呢?我運氣不好? – gcb 2012-03-29 22:55:39

+0

好吧,剛剛測試過,用你的例子$ <是第一個文件。所有的事情進展都比預期的要好。謝謝 – gcb 2012-03-29 22:57:41

+0

嗡嗡聲,但有了這種模式,我每次運行它執行的doit規則。 – gcb 2012-03-29 22:58:49