2014-04-11 2 views
3

다른 형식으로 데이터를 출력하기위한 여러 대상을 가진 makefile이 있습니다. make html, make pdf, make txt 등등이 옵션 중 하나를 사용할 때 실행 전 빌드 및 사후 빌드 단계가 필요합니다. 사전 빌드 단계를 정렬했지만 포스트 빌드 단계를 올바르게 수행하는 방법을 모르겠습니다.여러 대상에 대한 사후 빌드 단계

.PHONY: html pdf txt pre-build post-build 

pre-build: 
    do-pre-build-stuff 

post-build: 
    do-post-build-stuff 

html: data.dat 
    generate-html data.dat 

pdf: data.dat 
    generate-pdf data.dat 

txt: data.dat 
    generate-txt data.dat 

data.dat: pre-build 
    generate-some-data > data.dat 

모든 대상 후에 post-build 단계를 실행하려면 어떻게해야합니까?

답변

7

불행히도 각 규칙마다 다른 규칙을 작성해야합니다. 그러나 당신은 static pattern rule와 그것을 간단하게 할 수 있습니다

html pdf txt: %: real-% 
     do-post-build-stuff 

real-html: data.dat 
     generate-html data.dat 

real-pdf: data.dat 
     generate-pdf data.dat 

real-txt: data.dat 
     generate-txt data.dat 

이는 real- 버전에 따라 목표 html, pdftxt을 만듭니다. real- 버전이 실제 작업을 수행 한 후 완료되면 빌드 후 작업은 기본 대상 (html, pdftxt)의 제조법으로 수행됩니다.

이 규칙은 단지 속기이기 때문에 모두 작성하지 않아도됩니다. 결과는 동일합니다 :

html: real-html 
     do-post-build-stuff 

pdf: real-pdf 
     do-post-build-stuff 

txt: real-txt 
     do-post-build-stuff 
+0

그럴듯한데, 잠시 후에 시도해 봅니다. 첫 번째 줄에서 무슨 일이 일어 났는지 설명해 주시겠습니까? – DanielGibbs

+0

정적 패턴 규칙과 약간의 정보를 설명하는 make docs에 대한 포인터를 추가했습니다. – MadScientist