Makefile:将多个.dot文件转换为.png

时间:2016-07-02 14:14:00

标签: makefile

我是一个相当新的makefile,所以请不要苛刻。 :)

我的问题是我想将makefile目录中的所有.dot文件转换为.png文件。 通常这个命令可以解决我的问题:

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

..但它没有。它似乎正在转换所有文件,但也会覆盖它们。所以我得到的是3个.png文件中的一个,这个错误:

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

我做错了什么或者不是我要找的代码?

1 个答案:

答案 0 :(得分:0)

假设您的文件是foo.dotgraph.dotexample.dot。你基本上是在运行这个命令:

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

...告诉shell执行dot -Tpng foo.dot graph.dot example.dot graph.png example.png并将输出重定向到foo.png

您应该教导make如何从.dot文件创建.png文件:

%.png: %.dot
        dot -Tpng $< > $@

$<$@是所谓的automatic variables; %.png: %.dot的事情是pattern rule。)

然后告诉它dot目标取决于所有.png文件:

.PHONY: dot
dot: $(DOTPNG)

.PHONY告诉make dot实际上并不是文件的名称,它只是触发命令的规则。)