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