带选择的 Makefile

带选择的 Makefile

我正在使用以下 makefile 来运行命令

texi2pdf 06a-amcoh.texi

但我还有另外两个文件,即06a-amcoh-igm.texi06a-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 

相关内容