我是一个相当新的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
我做错了什么或者不是我要找的代码?
答案 0 :(得分:0)
假设您的文件是foo.dot
,graph.dot
和example.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
实际上并不是文件的名称,它只是触发命令的规则。)