Makefile多行变量,单个命令

时间:2014-02-27 14:38:14

标签: makefile multiline inkscape

我想有一个makefile,它可以编译所有我的.svg文件,一次将一个变量编译到命令行中。如果到目前为止尝试的是:

FIGS_SVG= \
fault_region.svg \
fault_region2.svg

all:
inkscape -z -D --file=$(FIGS_SVG) --export-pdf=$(FIGS_SVG:.svg=.pdf) --export-latex

运行此操作时,变量将依次设置到命令中:

inkscape -z -D --file=fault_region.svg fault_region2.svg --export-pdf=fault_region.pdf fault_region2.pdf --export-latex

1 个答案:

答案 0 :(得分:0)

通常使用Make,您可以将一种文件转换为另一种文件,然后告诉它您希望它构建的文件,并为您做好照顾:

FIGS_SVG = \
    fault_region.svg \
    fault_region2.svg

all: $(FIGS_SVG:.svg=.pdf)

%.pdf %.pdf_tex: %.svg
    inkscape -z -D --file=$< --export-pdf=$@ --export-latex

特殊变量$@$<记录在手册的Automatic Variables部分。

这将运行两个命令

inkscape -z -D --file=fault_region.svg --export-pdf=fault_region.pdf --export-latex
inkscape -z -D --file=fault_region2.svg --export-pdf=fault_region2.pdf --export-latex

但仅当.pdf文件不存在或文件修改时间比相应的.svg文件时更早。

请注意,Make已被告知已创建tex文件,因此如果您删除其中一个,Make将知道如何重新生成它。