2013-11-02 2 views
4

g ++에 헤더 파일을 재귀 적으로 검색 할 수 있습니까? 내 예제에서 나는 g ++디렉토리 및 하위 디렉토리에서 헤더 파일을 검색 할 수 있습니까?

/ARDrone_SDK_2_0_1/ARDroneLib/소프트/

및 헤더 파일에 대한 모든 하위 디렉토리를 검색하고 싶습니다. 이 작업을 수행 할 수 있습니까? 다음은 간단한 Makefile 예제 : 두 개의 서로 다른 도구, makeg++을 가미하여 있기 때문에

C=g++ 
CFLAGS=-c -Wall 
LDFLAGS= 
INC1=/ARDrone_SDK_2_0_1/ARDroneLib/Soft/ <- can this be recursive? 
INCDIRS= -I${INC1} 
SOURCES=src/dronevid.cpp 
OBJECTS=$(SOURCES:.cpp=.o) 
EXECUTABLE=build/dronevid 

all: $(SOURCES) $(EXECUTABLE) 

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o [email protected] 

.cpp.o: 
    $(CC) $(CFLAGS) $(INCDIRS) $< -o [email protected] 

답변

6

문제는 약간의 혼란이다.

g++ 주어진 디렉토리의 모든 하위 디렉토리를 검색 할 수있는 방법이 없습니다. 포함 된 파일을 찾으려는 모든 디렉토리는 명령 행에서 -I 플래그로 개별적으로 지정해야합니다.

원할 경우 make을 사용하여 해당 인수를 구성하고 명령 줄에 넣을 수 있습니다. 당신은 GNU가 만들어 사용하는 가정 및 find 명령을 지원하는 UNIX 계열 시스템, 당신은 같은 것을 할 수 있습니다 : 난 그냥 선행이 정말 좋은 생각이 아니다라고한다

INCDIRS := $(addprefix -I,$(shell find /ARDrone_SDK_2_0_1/ARDroneLib/Soft -type d -print)) 

. 해당 디렉토리가 어떤 순서로 표시되는지 알지 못하며 문제를 일으킬 수있는 여러 디렉토리에 동일한 헤더 파일의 사본이 여러 개 있는지 여부를 알 수 없습니다.

일반적으로 하위 디렉토리의 헤더는 컴파일 라인에 최상위 디렉토리를 추가 한 다음 코드의 #include 행에 상대 경로를 사용하는 방식으로 작동합니다. 같은 뭔가 :

#include <subdir/subsubdir/header.h> 

그런 다음 추가하십시오 g++ 컴파일 라인에

-I/top/level/dir 

.

+0

확인. 그건 의미가 있습니다. 감사. – Nick

관련 문제