選択項目を含む Makefile

選択項目を含む Makefile

次のmakefileを使用してコマンドを実行しています。

texi2pdf 06a-amcoh.texi

06a-amcoh-igm.texiしかし、2つの異なるファイルであるandがありますが、このファイルもandと呼ぶことができるように06a-amcoh-rfc.texiしたいと思います。texi2pdf 06a-amcoh-igm.texitexi2pdf 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 

関連情報