2013-02-26 79 views
0

我很好奇,如果Make有一種方法來支持多種(獨立)創建相同目標的方法。例如,假設我有兩個源目錄:svg_src(包含SVG圖像)和agr_src(包含xmgrace圖)。我希望能夠寫一個規則,這樣我就不必理會令人擔憂的來源是什麼:GNU Make帶有多個選項的目標

pdf_out/%.pdf : svg_src/%.svg 
    rsvg-convert -f pdf -o [email protected] $< 

pdf_out/%.eps : agr_src/%.svg 
    gracebat -hdevice EPS -hardcopy [email protected] $< 

pdf_out/%.pdf : pdf_out/%.eps 
    epstopdf $< 

然而,第二%.pdf規則覆蓋第一位的,而不是提供另一種選擇。

有沒有辦法用Make來完成這個?

回答

2

您已經提供了正確的解決方案。與您的假設相反,第二條規則不會覆蓋第一條規則,因爲它(由於源目錄)具有不同的依賴關係。

看看下面的例子,在這裏我用你的Makefile並與a.svg在svg_src和b.svg你的目錄結構agr_src:

#> make -n pdf_out/a.pdf pdf_out/b.pdf 
rsvg-convert -f pdf -o pdf_out/a.pdf svg_src/a.svg 
gracebat -hdevice EPS -hardcopy pdf_out/b.eps agr_src/b.svg 
epstopdf pdf_out/b.eps 
rm pdf_out/b.eps 
#> 

我想,這正是你想要的。

+0

哇..我嘗試了一個示例測試,但沒有把它分離成目錄(foo:bar; foo:baz)...顯然這些目錄有所作爲。感謝您指出了這一點。 – zebediah49 2013-02-26 17:01:58