다음 makefile을 사용하여 명령을 실행하고 있습니다.
texi2pdf 06a-amcoh.texi
06a-amcoh-igm.texi
하지만 두 개의 다른 파일인 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