То, что я делаю в моем Makefile -
SRCS=$(wildcard *.c)
depend: $(SRCS)
gcc -M $(CFLAGS) $(SRCS) >depend
include depend
Это означает, что если какой-либо из исходных файлов будет обновлен, будет запущено правило зависимости, и используйте gcc -M для обновления файла с именем зависимость. Затем он включается в make-файл для предоставления правил зависимости для всех исходных файлов.
Make проверит, обновлен ли файл, прежде чем включать его, поэтому это правило зависимости будет запускаться при необходимости всякий раз, когда вы запускаете make без необходимости выполнять make make.
Это будет выполняться каждый раз, когда любой файл был изменен. Я никогда не сталкивался с этой проблемой, но если у вас было огромное количество файлов в каталоге, вы могли бы обнаружить, что это заняло бы слишком много времени, и в этом случае вы можете попробовать создать один файл зависимостей на исходный файл, например:
SRCS=$(wildcard *.c)
DEPS=$(SRCS:.c=.dep)
%.dep : %.c
gcc -M $(CFLAGS) $< >$@
include $(DEPS)
Обратите внимание, что вы можете использовать -MM вместо -M, чтобы не включать системные заголовки.