ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
967427
AlexBi (27.12.2019 13:01 - 13:03, просмотров: 3216)
Кто-то пользуется 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 одно и то же?