0

我很好奇 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 完成这个?

4

1 回答 1

2

您已经提供了正确的解决方案。与您的假设相反,第二个规则不会覆盖第一个规则,因为它(由于源目录)具有不同的依赖项。

考虑以下示例,我a.svg在 svg_src 和b.svgagr_src 中使用了您的 Makefile 和目录结构:

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

我想,这正是你想要的。

于 2013-02-26T07:35:14.690 回答