GNU Make为目标提供多个选项

时间:2013-02-26 06:04:29

标签: makefile gnu-make

我很好奇,如果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实现这个?

1 个答案:

答案 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
#>

我想,这正是你想要的。