我很好奇,如果Make有一种方法来支持创建同一目标的多种(独立)方法。例如,假设我有两个源目录:svg_src
(包含SVG图像)和agr_src
(包含xmgrace图)。我希望能够编写一条规则,以便我不必担心来源是什么:
pdf_out/%.pdf : svg_src/%.svg
rsvg-convert -f pdf -o $@ $<
pdf_out/%.eps : agr_src/%.svg
gracebat -hdevice EPS -hardcopy $@ $<
pdf_out/%.pdf : pdf_out/%.eps
epstopdf $<
但是,第二个%.pdf
规则会覆盖第一个规则,而不是提供另一个选项。
有没有办法用Make实现这个?
答案 0 :(得分:2)
您已经提供了正确的解决方案。与您的假设相反,第二条规则不会覆盖第一条规则,因为它(由于源目录)具有不同的依赖关系。
考虑以下示例,其中我在svg_src中使用了您的Makefile和目录结构a.svg
,在agr_src中使用了b.svg
:
#> 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
#>
我想,这正是你想要的。