주문 전용 전제 조건이 가짜 대상 인 경우 주문 전용 우선 순위가 손실되는지 궁금합니다. 다음을 고려하십시오.전제 조건이 가짜 대상 인 주문 전용 전제 조건의 동작은 무엇입니까?
%.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
은 가짜가 아니며 생성되지 않습니다. 나는 그것을 가짜로 만들고 싶지만 그 행동을 분명히하고 싶다.
작성 : _if'unpack_chroot'는 주문 전용 전제 조건이 아니며 다른 make 대상 [... make]에 대한 전제 조건 처리의 일부로 압축을 풀어도'% .copy'_를 다시 작성하지 않습니다. 이것은 사실이 아닙니다. 일반적인 제반 사항이 재 빌드되면, 종속 된 모든 대상이 재 빌드됩니다. 그러나 이와 같은 가상 타겟에 따라 일반적으로 좋은 생각이 아닙니다. make를 새로 실행할 때마다 타겟이 다시 실행되기 때문입니다. 또한'.PHONY' 규칙을 선언하면 정상적으로 종속 된 모든 타겟이 항상 다시 빌드됩니다. – MadScientist
죄송합니다, 형편 없음. 질문을 업데이트했습니다. 전제 조건이 다른 make 프로세스에 의해 작성된 경우. 그러나, 나는 작은 독립 실행 형 테스트를 만들어 make의 디버그 출력을 검사했습니다. 이 경우 make는 올바른 일을하고 있으며 주문 전용 전제 조건은 필요하지 않습니다. 의존성 처리가 동일해야하기 때문에 실제 makefile에서 왜 이것이 필요한지 모르겠습니다. 라이브 빌드를위한 디버그를 생성하고 실제로 수행중인 작업을 살펴보아야 만 주문 전용 전제 조건이 필요합니다. – Craig
내가이 문제에 대해 생각하지 않기 때문에이 질문을 비우겠다. – Craig