2013-08-08 2 views
1

4 개의 타겟이있는 메이크 파일이 있습니다. 이러한 대상 중 두 개를 복제하여 전제 조건으로 실행해야하는 대상이 많을 수도 있습니다 (이들은 double-colon targets입니다). 두 개의 목표는 match-anything rules입니다. 불행히도, 기대했던 것처럼 전혀 작동하지 않습니다. 나는이 같이있는 PreReqs에 대한 명시 적입니다 경우메이크 파일은 전제 조건으로 모두 일치합니다.

make build_foo 
1. pre_build: 
3. post_build: 
2. _internal_foo: 
4. build_foo: pre_build _internal_foo post_build 

: 나에게이 출력을 준

.PHONY: 
build_%: pre_build post_build _internal_% 
     @echo "4. [email protected]: $^" 

.PHONY: pre_build 
pre_build:: 
     @echo "1. [email protected]: $^" 

.PHONY: _internal_% 
_internal_%: 
     @echo "2. [email protected]: $^" 

.PHONY: post_build 
post_build:: 
     @echo "3. [email protected]: $^" 

:

:

.PHONY: 
build_%: pre_build post_build _internal_% 
     @echo "4. [email protected]: $^" 

.PHONY: pre_build 
pre_build:: 
     @echo "1. [email protected]: $^" 

.PHONY: _internal_% 
_internal_%: pre_build 
     @echo "2. [email protected]: $^" 

.PHONY: post_build 
post_build:: _internal_% 
     @echo "3. [email protected]: $^" 

대신 나는이 얻을 나는이 시작

make build_foo 
1. pre_build: 
make: *** No rule to make target `pre_build'. Stop. 

의존성을 만들려면 무엇을해야합니까? 이런 식으로? GNU Make 3.81을 사용하고 있습니다.

답변

0

이것은 GNU Make 3.81의 진짜 버그 인 것 같습니다.

나는이 해결 방법 제안 :

define prebuild 
@echo "1. pre_build: $^" 
endef 

define postbuild 
@echo "3. post_build: $^" 
endef 

.PHONY: 
build_%: _internal_% 
     @echo "4. [email protected]: $^" 

.PHONY: _internal_% 
_internal_%: 
     $(prebuild) 
     @echo "2. [email protected]: $^" 
     $(postbuild) 

# pre_build and post_build are not used here, but may still be used elsewhere 

.PHONY: pre_build 
pre_build:: 
    $(prebuild) 

.PHONY: post_build 
post_build:: 
     $(postbuild) 
+0

이 내가 지금 일이 순서대로 실행되는 것을 무엇을 찾고 있어요 정말 매우 가깝습니다. 원하는 목표가 여러 개의'pre_build'와'post_build' 타겟을 실행할 수 있다는 것을 나타 내기 위해 질문을 업데이트했습니다. – paullckby

+0

@paullckby : 명령을'prebuild'와'postbuild'에 넣을 수 없습니까? – Beta