2016-07-02 41 views
0

我是相當新的makefile,所以請不要苛刻。 :)Makefile:將多個.dot文件轉換爲.png

我的問題是,我想將生成文件的目錄中的所有.dot文件轉換爲.png文件。 通常這個命令應該能解決我的問題:

DOT_FILES=$(wildcard *.dot) 
DOTPNG=$(DOT_FILES:.dot=.png) 
... 
...  
dot: $(DOT_FILES)  
    @dot -Tpng $(DOT_FILES) > $(DOTPNG) 

..但事實並非如此。它似乎是轉換所有文件,但也覆蓋它們。所以,我得到的是3 .png文件1,但此錯誤:

Error: dot: can't open graph.png 
Error: dot: can't open example.png 
Makefile:35: recipe for target 'dot' failed 
make: *** [dot] Error 3 

難道我做錯了什麼,或者不是此我要尋找的代碼?

回答

0

假設您的文件是foo.dot,graph.dotexample.dot。你基本上運行此命令:

dot -Tpng foo.dot graph.dot example.dot > foo.png graph.png example.png 

...它告訴執行dot -Tpng foo.dot graph.dot example.dot graph.png example.png和輸出重定向到foo.png外殼。


而是應該教make如何從.DOT文件中創建一個PNG文件:

%.png: %.dot 
     dot -Tpng $< > [email protected] 

$<[email protected]是所謂automatic variables;該%.png: %.dot事情是一個pattern rule。)

然後告訴它,dot目標取決於所有的.png文件:

.PHONY: dot 
dot: $(DOTPNG) 

.PHONY告訴makedot是不是一個真正的文件的名稱,它只是觸發命令的規則。)

+0

非常感謝你。它的工作,但你能解釋這個'$ < > $ @'和這個'.PHONY:點 dot:$(DOTPNG)'是如何工作的或者他們實際上在做什麼? – Krys

+0

@Krys增加了文檔鏈接。 – melpomene

+0

明白了。再次感謝你 – Krys