2017-03-25 1 views
0

모든 .c 및 .h 파일에 대해 매우 간단한 makefile을 만들려고합니다. 모두 현재 디렉토리에 있습니다. 나는 makefile을 완전히 이해하지 못한다는 것을 인정할 것이다.makefile 치명적인 오류 : 파일이나 디렉토리가 없지만 파일이 현재 디렉토리에 있습니다.

prog3 : prog3.c prog3.h lib.o 
    gcc -c prog3.c 

lib.o : lib.c lib.h 
    gcc -c lib.c 

내가 명령 make를 사용할 때 나는이 메시지를 얻을 : 여기에 지금까지 가지고 무엇

prog3.c:5:17: fatal error: lib.c: No such file or directory 
compilation terminated. 
makefile:2: recipe for target 'prog3' failed 
make: *** [prog3] Error 1 

lib.c은, 그러나, 모든 다른 사람과 같은 디렉토리에있는 파일 (prog3.c을, prog3.h, lib.h).

이 특정 오류에 대해 많은 질문을 발견했지만 PWD에있는 파일에 대한 질문은 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

터미널에서 직접 명령을 실행 해보십시오. 'gcc -c lib.c'를 먼저 만든 다음'gcc -c prog3.c'를 만듭니다. 문제에 관해 밝혀 냈습니까? – StoryTeller

답변

0

당신의 메이크 파일은 괜찮아 보입니다. 메이크의 기본 구조는이 패턴을 포함

<build object> : <list of dependencies> 
     command to execute to build the object if dependencies have changed 
      ... 
     command to execute to build the object if dependencies have changed 

귀하의 메이크 어떻게해야 무엇 인 prog3.c를 컴파일을 시도하고 있습니다. 당신은 prog3.c에서 컴파일 오류가 있고 "lib.c을"#include를하려고하는 것 같습니다,하지만 내 생각 엔 당신의 라인 15에이 일을하는 것입니다 :이 경우

#include <lib.c> 

무엇 하고있다, 이것은 틀렸다. C 구현 파일에는 절대로 다른 .c 파일을 포함하면 안됩니다 (드문 예외가 있음). .h 헤더 파일 만 포함해야합니다. 링커는 lib.h에 대한 컴파일을 기반으로 lib.c에서 필요한 기능을 가져옵니다.

또한 대괄호 (<)가 포함 된 파일은 시스템 헤더에만 사용됩니다. 사용자 정의 헤더 파일은 따옴표를 사용하여 포함되어야한다 :

#include "lib.h" 

이, 당신의 컴파일 오류를 수정 당신이 선택 사람들을 원하는 경우 prog3.c 및 lib.c 파일을 제공하기 위해 질문을 수정하지 않습니다.

+1

문제는 lib.h의 인용문이었습니다. 나는 괄호가 있었다. 루키 실수 ... 정말 고마워! –

관련 문제