2011-04-28 8 views
13

나는 성공적으로 0이 아닌 값을 반환하고 실패 할 때 다른 0이 아닌 값을 반환하는 프로그램을 실행하는 Makefile을 가지고있다. 명령 앞에 -를 붙임으로써 종료 상태를 무시할 수 있다는 것을 알고 있습니다. 그러나 명령이 성공했는지 알아야하기 때문에 작동하지 않습니다.Makefile 쉘 호출의 종료 상태를 어떻게 확인합니까?

+12

첫 번째 단계는 성공이 아닌 0을 반환 프로그램의 메인테이너에 버그 리포트를 제출하는 것입니다. –

+2

음,이 프로그램은 상용 공급 업체의 프로그램이므로 프로그램의 동작이 변경 될지는 의문입니다. – trondd

+0

@trondd GNU make는 상업적이지 않은 GNU 프로젝트에 의해 개발되었습니다. 그것은 반대입니다 : 그것은 자유 소프트웨어입니다. – no92

답변

15

당신은 마지막 반환 값을 포함하는 쉘 $? 변수를 사용하여, 동일한 메이크 라인의 두 번째 명령에 반환 값을 테스트 할 수 있습니다. 명령으로 명령을 대체

test: 
    /bin/false ; /usr/bin/test "$$?" -eq 1  # <-- make does not stop here 
    /bin/echo "Continues ..." 
    /bin/false         # <-- make stops here 
1

도구가 작동하지 않는 방식에 따라 출력 파일이 있는지 확인할 수 있습니다. 뭔가 같은 :

@if test ! -f $(FILE); then exit 2; fi 
8

사용하여 명령과

command || [ $$? -eq v ] 

,과와 V : 분명히 컴파일을 중지 할 것 false 명령을 예를 들어

값은 성공시 반환됩니다.

(이건 그냥 디디에 Trosset의 대답의 컴팩트 버전입니다.)

+3

'$?'는 make 변수 정의에 따라 해석되기 때문에 이것은 makefile에서 그대로 작동하지 않습니다. 대신에'$$? '를 사용해야합니다. –

+0

고정; 수정 해줘서 고마워. – reinierpost

+1

Didier Trosset의 대답과 비교하면,이 명령은 상태가 0 인 명령이 반환 될 때도 전달됩니다 (내 경우에는 내가 원했던 것이 아닙니다)! –

관련 문제