2013-11-02 2 views
4

Можно ли указать g ++ для поиска в рекурсивной папке для файлов заголовков? В моем примере я хотел бы г ++ искатьМогу ли я искать каталог и подкаталоги для файлов заголовков?

/ARDrone_SDK_2_0_1/ARDroneLib/Soft/

и все подкаталоги для заголовочных файлов. Это можно сделать? Вот простой пример Makefile:

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

вопрос немного сбивает с толку, потому что вы приравнивая два различных инструмента, make и g++.

Существует нет способа получить g++ искать все подкаталоги данной директории. Каждый каталог, который вы хотите использовать для поиска включенного файла, должен быть индивидуально указан в командной строке с флагом -I.

Если вы хотите, вы можете получить make, чтобы построить эти аргументы и поместить их в свою командную строку. Предполагая, что вы используете GNU сделать, и UNIX-подобная система, которая поддерживает команду find, вы можете сделать что-то вроде этого:

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

я должен просто сказать, авансом, это не очень хорошая идея. Вы не знаете, в каком порядке будут отображаться эти каталоги, и вы не знаете, есть ли несколько копий одного и того же заголовочного файла в разных каталогах, которые могут вызвать проблемы.

Как правило, заголовок заголовков в подкаталогах должен работать, так что вы добавляете каталог верхнего уровня в строку компиляции, а затем используйте относительные пути в строке #include в коде. Что-то вроде:

#include <subdir/subsubdir/header.h> 

Затем добавить:

-I/top/level/dir 

линии g++ компиляции.

+0

Хорошо. В этом есть смысл. Благодарю. – Nick

Смежные вопросы