次のmakefileを使用してコマンドを実行しています。
texi2pdf 06a-amcoh.texi
06a-amcoh-igm.texi
しかし、2つの異なるファイルであるandがありますが、このファイルもandと呼ぶことができるように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