2013-10-10 5 views
1

아니라,메이크 - 날짜 규칙까지 파일이 (매우) 간단한 Makefile을 고려

all: a b 
    @echo done 
a: 
    touch [email protected] 
b: 
    touch [email protected] 

내가 기대되는 행동을하지 않았다.

실제로 모든 규칙이 "최신"이 아닌 경우에만 "모든"규칙이 실행되기를 바랍니다.

그러나 첫번째 $ 메이크업에 나는 어떤 식 으로든가 있습니까

touch a 
touch b 
done 

내가 ... "최신"일반적으로 파일을받을 것을 undenstand 그러나 다른 사람

done 

를 얻을 수 모든 "의존"이있을 때 "모든"규칙을 최신으로 간주하는 규칙을 갖고 있습니까?

고마워,

추신 : 나는 모든 트릭 $ 터치를 알고 있지만, 목표는 항상 조리법을 실행할 수 있도록 다음 존재하지 않는 경우 그 지점

답변

1

번이 아니다.

귀하의 all 제조법이 어떤 전제 조건이 만들어 졌는지 확인할 수있는 해킹 방법이 있으며 그럴 경우 다른 방식으로 작동합니다. 최소한 GNU make를 사용한다면.

ETA :

한 가지 방법은 BUILT가 설정되어있는 경우 다음 all 대상에 당신이 볼 수, 각 대상에 $(eval BUILT = 1)를 추가하는 것입니다. GNU make의 최신 버전이 필요합니다.

BUILT = 

all: a b 
     @[ -n '$(BUILT)' ] && echo done 
a: 
     touch [email protected] $(eval BUILT = 1) 
b: 
     touch [email protected] $(eval BUILT = 1) 
+0

"해킹 방법"이 될 수있는 것은 무엇입니까? – Chmool