понадобилась поддержка компиляции исходников во многоуровневых каталогах
не вопрос — расширяем main.mak
...
SRC_CPP ?= $(wildcard *.cpp)
SRC_CPP += $(wildcard Modules/*/*/*/*.cpp)
SRC_CPP_DIR ?= $(wildcard Modules/*/*/*)
OBJ_CPP_DIR = $(addprefix $(OBJDIR)/, $(SRC_CPP_DIR))
...
$(OBJDIR)/%.d: %.cpp
-$(MKDIR) $(OBJDIR)
-$(MKDIR) -p $(OBJ_CPP_DIR)
$(ECHO) "Generating dependencies for \"$(CURDIR)/$<\"..."
$(CPP) -M -MG $(CFLAGS) $< | $(SED) 's@^\(.*\)\.o:@$(OBJ_CPP_DIR)/\1.d $(OBJ_CPP_DIR)/\1.o:@' > $@
все хорошо — изменения в cpp файлах отрабатываются, а изменения во влияющих на них .h файлах не отрабатываются
изменения в .h файлах корневого каталога отрабатываются нормально
что еще нужно подправить?
Здравствуйте, Oval, Вы писали:
O>все хорошо — изменения в cpp файлах отрабатываются, а изменения во влияющих на них .h файлах не отрабатываются
O>изменения в .h файлах корневого каталога отрабатываются нормально
O>что еще нужно подправить?
так сгенерённые .d файлы нужно включить в make, дабы они сработывали.
именно в них указана зависимость объктных файлов от .cpp и .h
В приведённом примере этого не видно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, silamantex, Вы писали:
S>Здравствуйте, Oval, Вы писали:
O>>все хорошо — изменения в cpp файлах отрабатываются, а изменения во влияющих на них .h файлах не отрабатываются
O>>изменения в .h файлах корневого каталога отрабатываются нормально
O>>что еще нужно подправить?
S>так сгенерённые .d файлы нужно включить в make, дабы они сработывали.
S>именно в них указана зависимость объктных файлов от .cpp и .h
S>В приведённом примере этого не видно.
инклюдится:
ifneq ($(findstring clean, $(MAKECMDGOALS)), clean)
ifneq ($(findstring rebuild, $(MAKECMDGOALS)), rebuild)
-include $(OBJ_CC:.o=.d) $(OBJ_CPP:.o=.d) $(OBJ_AS:.o=.d)
endif
endif
файл .d:
/obj/subdir/test.d /obj/subdir/.o: subdir/test.cpp \
...
subdir/test.h
изменение subdir/test.cpp подхватывается, subdir/test.h нет :???:
пробовал их вручную менять местами в .d после его генерации — результат тот же самый :xz:
S>>В приведённом примере этого не видно.
O>инклюдится:
O>O>/obj/subdir/test.d /obj/subdir/.o: subdir/test.cpp \
O>...
O>subdir/test.h
O>
еще странное поведение — файл subdir/test.cpp компилируется после main.cpp