2013-10-14 1 views
4

주문 전용 전제 조건이 가짜 대상 인 경우 주문 전용 우선 순위가 손실되는지 궁금합니다. 다음을 고려하십시오.전제 조건이 가짜 대상 인 주문 전용 전제 조건의 동작은 무엇입니까?

%.make: unpack_chroot 
    schroot $(CHROOT) make $* 

%.copy: | unpack_chroot 
    rsync -a input/$*/ $(CHROOT)/input/$*/ 

unpack_chroot: input/chroot.tar.gz 
    mkdir -p $(CHROOT) 
    tar -C $(CHROOT) -zxf $< 

.PHONY: unpack_chroot 

모두 % .make 및 % .copy 대상은 .PHONY입니다. 이러한 대상 중 일부는 chroot에 복사되는 파일에 의존하고 다른 대상은 그렇지 않습니다. 않는 사람들은 명시 의존성 정의된다 unpack_chroot 않은 경우

a.make: a.copy 
c.make: c.copy 

그러나 위해 전용 전제 조건 및 다른 전제 조건의 처리의 일부로서 압축 해제 된 타겟 하지 같은 메이크업 공정하게, unpack_chroot은 % .copy가 실행될 때 최신으로 간주되며 % .copy를 다시 작성하지 않습니다. 적어도 그것은 내가 본 것입니다. 현재 unpack_chroot은 가짜가 아니며 생성되지 않습니다. 나는 그것을 가짜로 만들고 싶지만 그 행동을 분명히하고 싶다.

+0

작성 : _if'unpack_chroot'는 주문 전용 전제 조건이 아니며 다른 make 대상 [... make]에 대한 전제 조건 처리의 일부로 압축을 풀어도'% .copy'_를 다시 작성하지 않습니다. 이것은 사실이 아닙니다. 일반적인 제반 사항이 재 빌드되면, 종속 된 모든 대상이 재 빌드됩니다. 그러나 이와 같은 가상 타겟에 따라 일반적으로 좋은 생각이 아닙니다. make를 새로 실행할 때마다 타겟이 다시 실행되기 때문입니다. 또한'.PHONY' 규칙을 선언하면 정상적으로 종속 된 모든 타겟이 항상 다시 빌드됩니다. – MadScientist

+0

죄송합니다, 형편 없음. 질문을 업데이트했습니다. 전제 조건이 다른 make 프로세스에 의해 작성된 경우. 그러나, 나는 작은 독립 실행 형 테스트를 만들어 make의 디버그 출력을 검사했습니다. 이 경우 make는 올바른 일을하고 있으며 주문 전용 전제 조건은 필요하지 않습니다. 의존성 처리가 동일해야하기 때문에 실제 makefile에서 왜 이것이 필요한지 모르겠습니다. 라이브 빌드를위한 디버그를 생성하고 실제로 수행중인 작업을 살펴보아야 만 주문 전용 전제 조건이 필요합니다. – Craig

+0

내가이 문제에 대해 생각하지 않기 때문에이 질문을 비우겠다. – Craig

답변

-2

이 전자 메일 (http://kolpackov.net/pipermail/notes/2004-January/000001.html)에 따르면 일반 및 주문 전용 전제 조건 간의 유일한 차이는 후자가 $ ^와 같은 자동 make 변수에 포함되지 않는다는 것입니다.

일부 테스트에서 나는 이것이 유일한 차이점이라고 생각했습니다. 다른 모든 측면에서 그들은 정상적인 전제 조건과 동일하게 취급됩니다.

+1

아니요, 주문 전용 전제 조건은 대상이 주문 전제 조건보다 오래된 경우 대상 재 작성을하지 않습니다. – John

관련 문제