현상 : Makefile:17: *** missing separator. Stop.
원인 : Makefile을 작성할 때 명령어(command)부분은 모두 TAB 문자로 시작해야 하는데, TAB 문자를 쓰지 않았기 때문에 make가 명령어인지 아닌지를 구별 못하는 경우에 발생.
조치 : 17번째 줄(근처)에서 명령어가 TAB 문자로 시작하게 바꾼다.
현상 : make: *** No rule to make target `io.h', needed by `read.o'. Stop.
원인 : 의존 관계에서 문제가 발생했기 때문이다. 즉 read.c가 io.h에 의존한다고 정의되어 있는데, io.h를 찾을 수 없다는 경우에 발생.
조치 : 의존 관계에서 정의된 io.h가 실제로 존재하는지 조사해 본다. 없다면 그 이유를 한번 생각해 본다. make dep를 다시 실행시켜서 의존 관계를 다시 생성시켜 주는 것도 하나의 방법이다.
현상 : Makefile:10: *** commands commence before first target. Stop.
원인 : '첫 번째 타겟이 나오기 전에 명령어가 시작되었다'는 애매한 에러 메시지이다. 이 에러의 원인은 주로 긴 문장을 여러 라인에 표시를 하기 위해서 '\'를 사용할 때, 이를 잘못 사용했기 때문인 것 같다. 즉 '\'부분은 라인의 가장 끝문자가 되어야 하는데 실수로 '\'뒤에 스페이스를 몇 개 집어넣으면 여지없이 위의 에러가 발생한다.
조치 : 10번째 줄(근처)에서 '\'문자가 있거든 이 문자가 라인의 가장 끝문자가 되도록 한다. 즉 '\'문자 다음에 나오는 글자(스페이스가 대부분) 는 모조리 없애 버린다.
현상 : 이미 컴파일했던 파일을 고치지 않았는데도 다시 컴파일한다.
원인 : make가 의존 관계를 모르기 때문이다. 즉 사용자가 의존 관계를 설정해 주지 않았다는 말이 된다. 따라서 make는 무조건 모든 파일을 컴파일해서 실행 파일을 만드는 일이 자신이 할 일이라고 생각하게 된다.
조치 : 목적 파일, 소스 파일, 헤더 파일들의 의존 관계를 설정해 주어야 한다. gccmakedep *.c 라고 하면 Makefile의 뒷부분에 자동적으로 의존 관계를 만들어 준다. 그외의 다른 파일들에 대해서는 사용자가 적절하게 의존 관계를 설정해 주어야 한다.
TARGET : DEPENDENCY의 형식으로 의존 관계를 작성한 것이다.
'▶ Tuxedo > 기술자료' 카테고리의 다른 글
▶ 링크 타임시 에러 점검 (0) | 2012.02.23 |
---|---|
▶ 컴파일시 메시지 분석 (0) | 2012.02.23 |
▶ Compile 관련 사항(AIX) (0) | 2012.02.23 |
▶ 프로그래밍시 추천사항 (0) | 2012.02.23 |
▶ WTC Trace Levels (0) | 2012.02.23 |