선택 항목이 포함된 Makefile

선택 항목이 포함된 Makefile

다음 makefile을 사용하여 명령을 실행하고 있습니다.

texi2pdf 06a-amcoh.texi

06a-amcoh-igm.texi하지만 두 개의 다른 파일인 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 

관련 정보