다음은 make
에 의해서 생성될 수 있는 가장 일반적인 에러들의
리스트이며 그것들이 의미하는 바와 그것들을 고치는 방법에 대한
정보이다.
때때로 make
에러들은, 특별히 명령 스크립트 라인에서 -
접두사가 있을 때나 명령 라인 옵션으로써 -k
가 있을 때, 치명적인
것이 아니다. 치명적인 에러들은 ***
문자열이 그 앞에 붙는다.
에러 메시지들은 모두 프로그램(보통 `make')의 이름이 앞에 붙거나, 에러가 makefile 안에 있는 것이라면 문제를 담고 있는 파일과 라인넘버가 앞에 붙는다.
아래 테이블에서 이런 공통 접두사들이 빠져있다.
make
에러들이 전혀 아니다. 그들은
make
가 명령 스크립트의 일부로써 호출한 프로그램이, make
가 실패로 해석하는 0이 아닌
에러 코드 (`Error NN') 를 리턴하거나 다른 이상한
스타일로(어떤 종류의 시그널과 함께) 종료하였다는 것을 의미한다.
***
가 메시지에 붙어 있지 않으면 서브프로세스가 실패했지만
makefile 의 그 규칙이 특수 문자 -
를 앞에 달고 있어서
make
가 그 에러를 무시한 것이다.
make
의 일반적인 "Huh?" 에러 메시지이다. 이것은
make
가 makefile 의 이 라이을 파싱하면서 완벽하게 성공하지
못했다는 것을 의미한다. 이것은 기본적으로 "문법 에러(syntax error)"
를 의미한다.
이런 메시지가 나오는 가장 일반적인 이유들 중의 하나는 여러분이 (또는
많은 MS-Windows 에디터들의 경우와 비슷하게, 여러분의 에디터가) TAB
문자 대신에 공백들로 명령 스크립트들을 들여쓰기하려고 하는
것이다. 명령 스크립트에 있는 모든 라인은 반드시 TAB 문자로 시작하는
것을 기억하자. 8개의 공백은 의미가 없다.
make
명령(변수 할당과 같은)처럼 보이지 않는다. 명령
스크립트들은 항상 어떤 타겟과 연결되어 있어야 한다.
두번째 형태는 그 라인이 첫번째 공백문자가 아닌 문자로써 세미콜론을
가진다면 생성된다; make
는 이것을, 어떤 규칙의 "target:
dependency" 섹션을 그냥 떠났다는 것으로 해석한다.
make
가 타겟을 빌드할 필요가 있다고 판단했지만 makefile
안에서 그렇게 하는 것에 대한, 명시적 또는 묵시적(디폴트 규칙
데이터베이스를 포함해서) 규칙들(instructions)도 찾을 수 없다는
것을 의미한다.
그 파일이 빌드되기를 원한다면 그 타겟이 빌드되는 방법을 설명하는
규칙을 추가할 필요가 있다. 이 문제의 다른 가능성은 makefile 을
오자(그 파일 이름이 잘못되었다)했거나 소스 트리가 잘못된 경우이다(그
파일이 빌드될 것으로 생각된 것이 아니고 단지 종속물이다).
make
가 읽어들일 makefile 들을 찾을수 없다는 것을 의미한다. 후자는 어떤
makefile 들이 찾아졌으나 디폴트 타겟이 없고 어떤 것도 명령행에서
주어지지 않았다는 것을 의미한다. 이들 경우에 GNU make
는
아무것도 하지 않는다.
make
는 타겟 하나에 대해서 단 한번만 명령들이 지정되는 것을
허락한다(더블-콜론 규칙들을 제외하고). 이미 명령들을 가지도록 정의된
타겟에 대해서 명령들을 다시 주면 이 경고가 발행되고 두번째 명령들은
첫번째 것을 오버라이드할 것이다.
make
가 종속성 그래프에서 루프를 발견했다는 것을 의미한다: 타겟
xxx 의 종속물 yyy, 그리고 이것의 종속물들 등등 을 추적한
후 그들중 하나가 xxx 에 다시 종속한다는 의미이다.
make
변수 xxx 를 정의했다는 것을 의미한다. 이것은
허용되지 않는다; 단순-확장 변수 (:=
) 를 사용하든지 아니면 추가
연산자 (+=
) 를 사용하자.
%
) 를
담고 있지 않다는 것을 의미한다.
Go to the first, previous, next, last section, table of contents.