Кто-то пользуется gcc и make без самодельных костылей? Не получается использовать файл зависимостей, формируемый gcc Работа организована так, что исходники раскиданы по разным папкам, объектные в своей папке, файлы зависимостей в своей папке. make рассказываю где искать файлы через vpath ... Для получения файла зависимостей использую gcc -MMD файл формируется, но в нем вместе с именем файла указывается путь к нему, а make такое не понимает и зависимостей не видит. Например:
Структура папок и файлов (по названию понятно где что):
/DEP
/DEP/m1.d
/OBJ
/SRC
/SRC/m1.c
/SRC/m2.c
/SRC/m1.h
Мэйк файл (тут без вызова gcc, что бы проще проверять было)
vpath %.c ./SRC
vpath %.o ./OBJ
%.o %.d : %.c
cp $< ./OBJ/$(*F).o
tm.hex : m1.o m2.o
cp ./OBJ/m1.o tm.hex
include m1.d
Файл с зависимостями m1.d (типа того что выдаст gcc -MMD)
./OBJ/m1.o: SRC/m1.c SRC/m3.h
Обновляю m3.h - make не видит это изменение, пересборка не происходит. Если файл зависимостей сделаю таким
m1.o: SRC/m1.c SRC/m3.h
то все видит
Если в майкфайле указать зависимости с путями
tm.hex : ./OBJ/m1.o ./OBJ/m2.o
то он начинает понимать файл зависимостей с путями, но уже не находит как сделать ./OBJ/m1.o и считает что его делать не надо
Considering target file 'tm.hex'.
Considering target file 'OBJ/m1.o'.
Looking for an implicit rule for 'OBJ/m1.o'.
Trying pattern rule with stem 'm1'.
Trying implicit prerequisite 'OBJ/m1.c'.
Trying pattern rule with stem 'm1'.
Trying implicit prerequisite 'OBJ/m1.c'.
Looking for a rule with intermediate file 'OBJ/m1.c'.
Avoiding implicit rule recursion.
No implicit rule found for 'OBJ/m1.o'.
Considering target file 'SRC/m1.c'.
Looking for an implicit rule for 'SRC/m1.c'.
No implicit rule found for 'SRC/m1.c'.
Finished prerequisites of target file 'SRC/m1.c'.
No need to remake target 'SRC/m1.c'.
Considering target file 'SRC/m1.h'.
Looking for an implicit rule for 'SRC/m1.h'.
No implicit rule found for 'SRC/m1.h'.
Finished prerequisites of target file 'SRC/m1.h'.
No need to remake target 'SRC/m1.h'.
Finished prerequisites of target file 'OBJ/m1.o'.
Prerequisite 'SRC/m1.c' is older than target 'OBJ/m1.o'.
Prerequisite 'SRC/m1.h' is newer than target 'OBJ/m1.o'.
No recipe for 'OBJ/m1.o' and no prerequisites actually changed.
No need to remake target 'OBJ/m1.o'.
Вопрос, как получить из gcc файл зависимостей без пути в имени, или как make объяснить что бы он обнаружил, что m1.o и ./OBJ/m1.o одно и то же?