Этот пост может помочь вам:
make включает генерацию директивы и зависимости с -MM
По сути, make может генерировать список всех зависимостей в проекте. Я использую следующее во всех моих файлах make:
# Generate dependencies for all files in project
%.d: $(program_SRCS)
@ $(CC) $(CPPFLAGS) -MM $*.c | sed -e 's@^\(.*\)\.o:@\1.d \1.o:@' > $@
clean_list += ${program_SRCS:.c=.d}
# At the end of the makefile
# Include the list of dependancies generated for each object file
# unless make was called with target clean
ifneq "$(MAKECMDGOALS)" "clean"
-include ${program_SRCS:.c=.d}
endif
Пример того, что это делает. Допустим, у вас есть foo.cpp, который включает в себя foo.h, который включает в себя bar.h, который включает в себя baz.h. Выше сгенерирует файл foo.d и включит его в ваш файл make. Файл зависимостей foo.d будет выглядеть так:
foo.d foo.o: foo.cpp foo.h bar.h baz.h
Таким образом, make и вы можете увидеть полную цепочку зависимостей сборки для любого конкретного объектного файла.
Затем, чтобы найти все файлы, которые содержат определенный заголовок, просто grep -l foo.h *.d
, чтобы узнать, какие исходные файлы включают foo.h.