2012-06-20 4 views
2

나는 include 문을 포함하는 makefile을 가지고있다. 나는 포함 된 메이크 파일의 내용을 제어 할 수 없다. 그럼에도 불구하고 일부 전처리 단계를 대상의 일부 (전체가 아닌) 앞에 추가 할 수 있기를 원합니다. 다음의 예를 생각해동일한 이름을 가진 두 개의 타겟이있는 Makefile

install: 
     @echo "install target" 

include othermakefile.mk 

othermakefile.mk뿐만 아니라 목표를 설치 포함되어 있습니다. 이 스크립트를 실행하면 make는 경고를 표시하고 처음으로 설치 대상을 무시합니다. 쉽게

+0

그런 다음 충돌이 거의없는 것으로 이름을 변경하십시오 (예 :'foo_blah_install'). –

+0

내가 말했듯이 사용자가 "make install"을 입력하면 스크립트가 ** 사전 처리 ** 명령을 실행하기를 원합니다. 나는 표적의 이름을 바꾸고 싶지 않다. – Javad

+0

관련 : http://stackoverflow.com/q/1644920/86967 – nobar

답변

3

아무것도 :

install: pre_install 

.PHONY: pre_install 
pre_install: 
    do preinstallation things 

include othermakefile.mk 

편집 :
당신은 preqs의 install또는 전에 pre_install를 실행하려는 경우가 여기에 방법입니다. 그것은 원유와 추한,하지만 일을이 반드시 install의 모든 전제 조건을 다시하지 않을 것이다, 그래서 그들 중 일부는 그들의 오래된 상태로 남아있을 수 및 pre_install의 효과를 반영하지 않는 것이

install: pre_install 
    $(MAKE) -f othermakefile.mk [email protected] 

.PHONY: pre_install 
pre_install: 
    do preinstallation things 

참고.

install: pre_install 
    $(MAKE) --always-make -f othermakefile.mk [email protected] 

지금 모든 대상은 유효 기간이 있다고 가정합니다 확인하고 처음부터 다시 : 그 충분하지, 그리고 당신이 다른 모든 전제 조건 전에 pre_install을 원하는 경우에, 당신은 옵션 플래그를 추가 할 수 있습니다 (pre_install 이후).

+1

+1. 그러나 Make가'install' 의존성을 위에서 아래로 순서대로 처리 할 것이라고 보장합니까? ie'othermakefile.mk'에'install : foobar'가 포함되어 있다면,'pre_install'이'foorbar' 전에 처리된다는 보장이 있습니까? –

+0

@OliCharlesworth : 아니요, 그런 보증은 없습니다. make는'install' 전에'pre_install'을 빌드 할 것입니다 (이것은 제가 질문을 읽는 방법입니다). 그러나'install'의 다른 전제 조건들과 반드시 ​​같을 필요는 없습니다. 다른 모든 목표보다 앞설 수있는 방법이 있지만보다 과감한 방법입니다. – Beta

+0

다른 전제 조건보다 앞서 놓을 수있는 방법을 알려주십시오. * – Javad

관련 문제