2017-12-29 40 views
1

Markdown 파일, 비디오, graphviz 도트 파일 등의 컬렉션을 가지고 있으며 필요에 따라 파일을 처리하기 위해 make를 사용하고 싶습니다. 필요한 것 이상을 반복해서.대상과 동일한 이름의 메이크 파일 전제 조건 파일의 바로 가기

Makefile에서는 a) 너무 많지 않으므로 b) 각 파일은 이론적으로 빌드하는 데 약간 다른 프로세스가 필요할 수 있으므로 각 개별 파일에 대한 빌드 지침을 작성합니다. 표준 %.html: %.md 규칙 유형은 유용하지 않습니다. 왜냐하면 모든 html 파일이 같은 명령을 사용하여 빌드되는 것은 아니기 때문입니다.

그러나 규칙 구문의 필수 조건 섹션을 줄이는 방법을 알 수 없습니다. 각 대상 파일은 소스 디렉토리에있는 동일한 이름의 파일에 따라 다릅니다. 다음과 같은 기본 규칙에서 이름을 두 번 입력하지 않으려면 어떻게해야합니까? 필자는 파일 이름의 줄기, 대상 접미사 및 원본 접미사를 지정할 수 있어야한다고 생각합니다. 이것은 매우 간단한 것처럼 보입니다. 그래서 나는 그것을 설명하고 해결책을 찾기 위해 잘못된 용어를 사용하고있을 것입니다.

./dist/00-introductions/overview.html: ./src/00-introductions/overview.md 
     $(PANDOC) $(PANDOC_OPTIONS) $(PANDOC_REVEALJS) -o [email protected] $< 
가 중요한 경우

,

$ make -v 
GNU Make 4.1 
Built for x86_64-pc-linux-gnu 
+1

'.md.html :'(또는'% .html : % .md' 규칙)을 사용하여'.md' 파일을'.html'로 변환하기위한 일반 규칙을 만듭니다. 그런 다음 다른 소스 및 대상 디렉토리를 처리하는 방법을 알아 내야합니다. –

답변

1
당신은 더 나은 솔루션은 다수의 일반 규칙에 따라 그룹을 대상으로하는 것입니다 각 대상

./dist/00-introductions/overview.html: ./dist%.html: ./src%.md 
    $(PANDOC) $(PANDOC_OPTIONS) $(PANDOC_REVEALJS) -o [email protected] $< 

에 대해 별도의 정적 패턴 규칙을 사용할 수

하고, 타겟 특정 변수를 사용하여 조리법을 미세 조정하십시오 :

targets1 := ./dist/00-introductions/overview.html 
targets2 := ./dist/00-introductions/foobar.html 

$(targets1): ./dist%.html: ./src%.md 
    $(PANDOC) $(PANDOC_OPTIONS) $(PANDOC_REVEALJS) -o [email protected] $< 

$(targets2): ./dist%.html: ./src%.md 
    $(FOOBAR) $(FOOBAR_OPTIONS) -o [email protected] $< 

./dist/00-introductions/overview.html: PANDOC_OPTIONS := -foo 
./dist/00-introductions/foobar.html: FOOBAR_OPTIONS := -bar 
+0

전제 조건에서 %의 패턴 일치 사용이 대상에서와 동일하다고 생각했습니다. 그것은 비어 있지 않은 문자열과 일치 할 것입니다. 어떤 파일이 변경되었을 때 타겟이 재 컴파일되는 것을 원하지 않았기 때문에 (그렇지 않으면 Make를 사용하는 것이 무엇인가?) 나는 그 옵션을 간과했다. –