2012-02-25 4 views
1

모든 소스 파일 앞에 디렉토리 이름이 붙지 않도록 Makefile에서 vpath를 사용하려고합니다. 하지만 제대로 작동하지 않습니다. SRC 디렉토리가 제대로 포함되고Makefile vpath가 헤더 파일에 대해 작동하지 않습니다.

CC=gcc -Wall 

vpath %.h include 
vpath %.c src 

all: main.c Event.o Macros.h 
     $(CC) $< Event.o -o test/a.out 

Event.o: Event.c Event.h Macros.h 
     $(CC) -c $< -o [email protected] 

:

다음은 메이크입니다. 즉 Event.c 파일은 gcc에서 찾을 수 있습니다. 그러나 Event.h와 매크로 모두 .h가 아닙니다. gcc에서 Event.c를 컴파일 할 때 두 파일을 찾을 수 없다는 오류가 나타납니다.

내 C 파일의 #include 지시문을 각각 한 번에 변경하려고했습니다.

#include "Event.h" /* doesnt work */ 
#include <Event.h> /* doesnt work */ 
#include "../include/Event.h" /* works */ 

이 문제를 해결해 주시겠습니까? 실제 Makefile이 이보다 크므로 모든 소스 파일 앞에 디렉토리 이름을 사용하지 않으려합니다.

답변

7

vpath 지시어는 Make가 의존성을 찾는 방법만을 제어합니다. 어떤 식 으로든 GCC가 작동하는 방식에는 아무런 영향을 미치지 않습니다. 당신이 다른 디렉토리에있는 헤더가있는 경우, 당신은 명시 적으로 -I와 GCC 말할 필요 :

INCLUDE := include 

$(CC) -I$(INCLUDE) $c $< -o [email protected] 
+0

(가) 프로젝트에 포함 기반으로 만든 GCC 해결 된 경로를 볼 수있는 방법이 있나요? '-M -MG'는 내가 원하는 것을 수행한다. 즉, 오류를 무시하지만 해결 된 경로는 보여주지 않는다. – Royi

관련 문제