내 Makefile은 매우 간단합니다.
all:
[ -f MyFile ] && echo "MyFile exists"
물론 레시피 라인은 탭 문자로 시작됩니다. MyFile 파일이 존재하면 모든 것이 정상입니다. 그러나 파일이 현재 디렉토리에 없으면 다음과 같은 결과가 나타납니다.
Makefile:2: 대상 'all'에 대한 레시피가 실패했습니다. make: *** [all] 오류 1
if 문을 사용하여 이 오류를 제거할 수 있습니다.
all:
if [ -f MyFile ]; then echo "MyFile exists"; fi
두 명령문 모두 make 외부의 sh 및 bash에서 잘 작동합니다. 조건 연산자를 사용할 때 make 오류의 원인이 무엇인지 모르겠습니다. 아이디어는 어떻게 되었나요?
답변1
[ -f MyFile ] && echo "MyFile exists"
MyFile
존재하지 않는 경우 0이 아닌 상태 코드로 종료됩니다.
if [ -f MyFile ]; then echo "MyFile exists"; fi
MyFile
없는 한 성공(0) 상태 코드로 종료합니다.그리고 echo
쓰기 오류로 인해 실패했습니다.
Make는 상태 코드를 사용하여 명령이 실패했는지 확인하고 명령이 실패하면 기본적으로 실행을 중지합니다. 개별 명령줄에 접두사를 추가하여 이 기능을 비활성화 -
하거나 make -i
특수 대상을 실행하거나 지정하여 .IGNORE
전체를 비활성화할 수 있습니다. 그러므로
-[ -f MyFile ] && echo "MyFile exists"
Make가 계속 진행되도록 허용하지만 MyFile
존재하지 않는 경우 메시지를 인쇄하게 됩니다.
make: [Makefile:14: test] 오류 1(무시됨)
|| true
무늬이 특정 경우에도 작동하지만 무시됩니다 echo
. false인 경우 if condition; then command; fi
Make가 중지되지는 않지만 오류를 고려하고 모든 오류는 무시됩니다.condition
command
condition && command || true