Могу ли я искать каталог и подкаталоги для файлов заголовков?

Можно ли указать g ++ для поиска в рекурсивной папке для файлов заголовков? В моем примере я хотел бы 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 $@ .cpp.o: $(CC) $(CFLAGS) $(INCDIRS) $< -o $@ 

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

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

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

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

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

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

 #include  

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

 -I/top/level/dir 

в строку компиляции g++ .