2013-03-24 2 views
0

"질문 모드"의 재귀 호출을 실행하려고하는데 매우 독특한 시나리오에서 오류가 발생합니다.메이크 파일 재귀 -q 모드 오류 1

MAKE 3.81을 사용하고 있으며 완전히 다른 두 환경에서 테스트를 마쳤습니다.

"make -q"를 호출하면 makefile은 "$ (MAKE) -C sub/a /"를 호출하고 makefile은 "$ (MAKE) -f ../../makefile.b"

테스트 케이스는 내가 할 수있는만큼 간단합니다. 하위 프로젝트는 그래서 다시 컴파일해야하는 경우

makefile: 
a: 
     $(MAKE) -C sub/a 

sub/a/makefile: 
b: 
     $(MAKE) -f ../../makefile.b 

makefile.b: 
all: 
     echo hi 

이 운동의 요점 확인 할 수 있습니다 : 여기

nachum:/home/nachum/makefile_bug[1497]$make -q 
make -C sub/a 
make[1]: Entering directory `/home/nachum/makefile_bug/sub/a' 
make -f ../../makefile.b 
make[1]: *** [b] Error 1 
make[1]: Leaving directory `/home/nachum/makefile_bug/sub/a' 
make: *** [a] Error 2 
nachum:/home/nachum/makefile_bug[1498]$ 

는 메이크입니다 :이 오류가 왜 누군가가 말해 줄 수 필요한 경우 최상위 레벨 프로젝트를 적절하게 구축 할 수 있습니다. 그렇지 않으면 모든 것에 타임 스탬프를 사용해야합니다. (나는 이전에 타임 스탬프를 사용했지만, 다른 것들에 대해 혼란을 야기한다는 것을 깨달았습니다.)

이 문제에 대한 몇 가지 기묘한 해결 방법이 있습니다. A (에서 메이크)의 제조법 $ 호출 위의 추가 라인을 가지고 예를 들어, (MAKE), 즉 :

makefile: 
a: 
     @echo hi 
     $(MAKE) -C sub/a 

문제는 사라지고, AND (내 전체 테스트 케이스에) 종속 여전히 작동 . 또한 make를 직접 사용하면 ($ (MAKE)와 반대로) 동작을 변경하는 것처럼 보입니다.

도움을 주시면 감사하겠습니다. 감사합니다. Nachum

답변

0

-q 옵션이 지정된 로밍 문제입니다. -q은 명령을 실행하지 않지만 최신 상태 인 경우 종료 상태를 제공합니다. 사용시 ${MAKE}make -q -C sub/a가 실행됩니다. 약간의 순열과 조합 후에 나는 -q-C 옵션을 사용할 수 없다는 것을 발견했습니다. 꽤 원하는 경우 make --quite을 사용하거나 시간 소인을 확인하려면 -t (터치하지만 컴파일되지 않음) 또는 '-n` (드라이 런)으로 시도하십시오.

+0

소리가 버그와 같은가요? – nachum

+0

또는 이유가있을 수 있습니다. 아직 조사 할 필요가 있습니다. :) –