Make: автоматическое создание зависимостей - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть одно сомнение в автоматической генерации файла зависимостей с помощью Make.Здесь у меня есть make-файл с содержанием ниже.

DEPSALL := $(wildcard $(patsubst %,%.d,$(basename $(TGTFILES)/*.c)))
-include $(DEPSALL)
$(TGTFILES)/%.o: $(TGTFILES)/%.c
     mkdir -p $(@D)
     $(CC64) -MT $@ -MMD -MP -MF $(patsubst %,%.d,$(basename $@)) -o $(@) -c $(CFLAGS64) $<
...
...  

Я новичок в GNUmake и пытаюсь провести некоторый эксперимент.Я знаю, что вышеуказанные флаги -M * используются для создания файлов автозависимостей "* .d" с целью и зависимостями для каждого файла obj.Здесь при компиляции кода я просто закомментировал первые две строки и не увидел никакой разницы при компиляции кода.Не уверен, как эти строки влияют на мою компиляцию.

Действительно ли необходимо иметь эти две строки в моем make-файле?Без директивы include (-include $ (DEPSALL)) работает нормально.

1 Ответ

0 голосов
/ 31 декабря 2018

Предположим, что вы полностью создали свой код, поэтому при запуске make ничего не происходит, потому что все обновлено.

Теперь предположим, что один из ваших исходных файлов foo.c включает файл заголовка bar.h,Вы редактируете заголовочный файл bar.h, но не редактируете исходный файл foo.c.Для целей этого эксперимента вы можете использовать touch bar.h для имитации редактирования.

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

Что - это то, что эти двастроки и все опции -MT и т. д. предназначены для.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...