我正在使用以下 makefile 来运行命令
texi2pdf 06a-amcoh.texi
但我还有另外两个文件,即06a-amcoh-igm.texi
和06a-amcoh-rfc.texi
,我也希望能够将其称为texi2pdf 06a-amcoh-igm.texi
和texi2pdf 06a-amcoh-rfc.texi
。
我如何修改makefile
才能调用texi2pdf
特定文件。
.PHONY: all new again clean
ch6 := $(wildcard *amcoh.texi)
igm := $(wildcard *igm.texi)
rfc := $(wildcard *rfc.texi)
pdfs := $(tfiles:.texi=.pdf)
all: ${pdfs}
%.pdf: %.texi
texi2pdf $< -o $@
clean:
rm -f ${pdfs}
again:
${MAKE} clean
${MAKE}
new:
${MAKE} again
答案1
改变
pdfs := 06a-amcoh.pdf
到
pdfs := 06a-amcoh.pdf 06a-amcoh-igm.pdf 06a-amcoh-rfc.pdf
答案2
您需要将他们的名字包含在pdfs
列表中。
但惯用的方法是从源代码(在您的情况下为 .texi 文件)开始,然后动态生成输出列表(在您的情况下为 .pdf 文件)
另外,您应该将目标标记为.PHONY
不存在相应的文件。
.PHONY: all new again clean ch6 igm rf
ch6 := $(wildcard *amcoh.texi)
igm := $(wildcard *igm.texi)
rfc := $(wildcard *rfc.texi)
tfiles := $(ch6) $(igm) $(rfc)
pdfs := $(tfiles:.texi=.pdf)
define mkRule
$(eval $1: $$(filter $$($1:.texi=.pdf),$$(pdfs)))
endef
$(call mkRule,ch6)
$(call mkRule,igm)
$(call mkRule,rfc)
all: ${pdfs}
%.pdf: %.texi
texi2pdf $< -o $@
clean:
rm -f ${pdfs}
again:
${MAKE} clean
${MAKE} all
new:
${MAKE} again
现在调用 make 为:
make igm #to process *igm.texi