2013-01-08 59 views
3

我有一個由腳本基於​​一個XML文件,並任選的另一種XML文件生成一些.c和.h文件。Makefile中使用可選的依賴

從我讀過我應該可以使用通配符,例如:

%Generated.c %Generated.h : %Compulsory.xml $(wildcard %Optional.xml) 
    generation-script $< $* 

的文件XXXGenerated.c /小時,當我改變XXXCompulsory.xml但不是當我改變進行再生XXXOptional.xml。有誰知道爲什麼?

我能找到解決問題的重複的規則如下:

%Generated.c %Generated.h : %Compulsory.xml 
    generation-script $< $* 

%Generated.c %Generated.h : %Compulsory.xml %Optional.xml 
    generation-script $< $* 

,但我會想有一個更好的方式來指定一個可選的依賴?

謝謝!

注:此相同的問題已經問過(例如How to manage C header file dependencies?),但在這種情況下,我不能讓編譯器生成.D文件。

編輯: 爲Optional.xml的位置就可以了,因爲如果我只指定規則的工作原理:

%Generated.c %Generated.h : %Compulsory.xml %Optional.xml 
    generation-script $< $* 

並嘗試編譯僅適用於Optional.xml存在目標。

但我注意到,不與括號工作:

%Generated.c %Generated.h : %Compulsory.xml $(%Optional.xml) 
    generation-script $< $* 
+0

這應該工作,你確定你是不是混淆可選的位置? – perreal

+0

@perreal感謝您的答覆,見上面編輯的 – austinmarton

+0

可能重複[我怎樣才能使一個模式規則的依賴在一個Makefile可選?](http://stackoverflow.com/questions/34105205​​/how-can-i-make -a-pattern-rule-dependency-optional-in-a-makefile)投票結束這種方式,因爲其他人有正確答案。 –

回答

0
當您使用通配符功能

,通配符是*,不是%

($通配符*可選。 XML)

+0

這似乎沒有任何工作,也試過$(通配符* Optional.xml) – austinmarton