내가 사용하는 포트란으로 작성된 프로그램을 컴파일하려면 노력하고 있어요 make
(I가 가지고 Makefile을 포함하는 디렉토리에있는 동안, 그리고 Makefile을 , 나는 명령을 입력합니다 $ make target
“대상”은 시스템 별 목표 사양 내에서 존재하고, Makefile을 .로 I를 타겟 사양의 다양한 개정판을 시험 해보면을 호출 할 때 종종 다양한 오류 메시지가 표시됩니다 make
.
make[1]: Entering directory
/bin/sh: line 0: test: too many arguments
./dpp angfrc.f > angfrc.tmp.f
/bin/sh: ./dpp: Permission denied
make[1]: *** [angfrc.o] Error 126
make[1]: Leaving directory
make: *** [cmu60] Error 2
과
make[1]: Entering directory
/bin/sh: line 0: test: too many arguments
./dpp -DSTRESS -DMPI -P -D'pointer=integer'-I/opt/mpich_intel/include angfrc.f > angfrc.tmp.f
/bin/sh: ./dpp: Permission denied
make[1]: *** [angfrc.o] Error 126
make[1]: Leaving directory
make: *** [mpich-c2] Error 2
과
make[1]: Entering directory
/bin/sh: line 0: test: too many arguments
./dpp -DSTRESS -DMPI -P -D'pointer=integer' -I/opt/mpich_intel/include angfrc.f > angfrc.tmp.f
/bin/sh: ./dpp: Permission denied
make[1]: *** [angfrc.o] Error 126
make[1]: Leaving directory
make: *** [mpi-intel] Error 2
“오류 126″및 “오류 2″와 같은 오류 코드의 목록을 어떻게 찾을 수 있는지 알고 있습니까? 다른 웹 사이트 에서이 스레드 를 찾았 지만 회신의 의미가 확실하지 않습니다. make
오류 코드 의 시스템 독립적 의미가 없음을 의미 합니까? 제발 날 좀 도와 줄 수 있니? 고맙습니다.
답변
오류 코드는 make가 아닙니다. make는 실패한 명령의 반환 상태를보고합니다. 각 상태 값의 의미를 알려면 각 명령의 설명서를 참조해야합니다. 대부분의 명령은 0 = 성공, 다른 것 = 실패 이외의 차이점을 신경 쓰지 않습니다.
각 예제에서 ./dpp
실행할 수 없습니다. 이 경우, 호출하려고 한 쉘은 상태 코드 126 ( 표준 동작 )으로 종료됩니다 . 해당 쉘을 실행중인 make 인스턴스는 실패한 명령 (쉘)을 감지하고 종료하여 표시합니다 Error 126
. 해당 make 인스턴스는 그 자체가 make의 상위 인스턴스에 의해 실행되는 명령이며, make
유틸리티는 오류시 2를 리턴하므로 상위 make 보고서를 작성합니다 Error 2
.
빌드 실패는에서 비롯된 것 같습니다 test: too many arguments
. 이것은 makefile의 구문 오류이거나 bash /bin/sh
가 아닌 bash 특정 기능에 의존하기 때문일 수 있습니다 . 달리기 make SHELL=/bin/bash target
또는 make SHELL=/bin/ksh target
; 그래도 작동하지 않으면 makefile을 수정해야합니다.
답변
명확히하기 위해 Make는 gnu.org에 명시된 바와 같이 항상 세 가지 오류 코드 중 하나를 반환합니다 .
- 0 : 종료 상태가 ‘성공’입니다
- 2 : 오류 발생
- 1 : 대상을 업데이트해야 함을 나타내는 -q (질문) 플래그에 응답을 리턴합니다.
위의 예제를 실행하여 (2011 년부터 계속 사용한다고 가정) echo $?
터미널에서 실행 하여 이전 리턴 코드를 인쇄하여 이를 테스트 할 수 있습니다 .
Make는 126과 같은 다른 오류 코드를 인쇄하지만 오류가 발생하면 항상 오류 코드 2를 반환합니다.