make зависимости
От: Oval  
Дата: 12.12.06 17:20
Оценка:
понадобилась поддержка компиляции исходников во многоуровневых каталогах
не вопрос — расширяем 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 файлах корневого каталога отрабатываются нормально
что еще нужно подправить?
Re: make зависимости
От: denaturat  
Дата: 13.12.06 06:39
Оценка:
Здравствуйте, Oval, Вы писали:

[]

Указать зависимости от заголовочных файлов. Больше никак, вроде.
Re: make зависимости
От: silamantex Южная Корея  
Дата: 14.12.06 07:50
Оценка:
Здравствуйте, Oval, Вы писали:

O>все хорошо — изменения в cpp файлах отрабатываются, а изменения во влияющих на них .h файлах не отрабатываются

O>изменения в .h файлах корневого каталога отрабатываются нормально
O>что еще нужно подправить?

так сгенерённые .d файлы нужно включить в make, дабы они сработывали.
именно в них указана зависимость объктных файлов от .cpp и .h

В приведённом примере этого не видно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: make зависимости
От: Oval  
Дата: 17.12.06 08:36
Оценка:
Здравствуйте, 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:
Re[3]: make зависимости
От: Oval  
Дата: 17.12.06 08:43
Оценка:
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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.