2015-09-25 2 views
0

У меня есть совет по обзору кода, чтобы использовать семейство опций -M с gcc для генерации генерации автоматической зависимости проблема в том, что документация меня сбивает с толку, и я до сих пор не понимаю, как я предполагаю использовать его, когда я просто добавил -М к CFLAGS и до сих пор я едва мог найти никакой разницы я только что получил warning: main.o: linker input file unused because linking not done Я использую gcc 4.8.4Как использовать gcc -M для генератора автозависимости

ответ

2

Это не достаточно, чтобы изменить то, как вы вызываете компилятор - вы также необходимо изменить свой Makefile, чтобы использовать вновь созданную информацию.

Пол Смит написал good guide to how to set up automatic dependency tracking для марки.

2

Для полностью автоматической версии, которая не мешает «чистых» целей, использовать что-то вроде этого:

%.d: %.c Makefile 
    $(CC) -MM -MT"[email protected] $(@:.d=.o)" [email protected] $(CFLAGS) $(INCLUDES) $< 

ifneq ($(MAKECMDGOALS),clean) 
ifneq ($(MAKECMDGOALS),distclean) 
-include $(OBJS:.o=.d) 
endif 
endif 

Это предполагает, у вас есть список объектных файлов, которые будут связаны в $(OBJS). Параметр -MT здесь гарантирует, что сам файл зависимостей будет иметь те же зависимости, что и файл объекта. Без него созданный файл зависимостей будет, например, выглядеть

foo.o: foo.c foo.h bar.h 

но вы хотите

foo.o foo.d: foo.c foo.h bar.h 

так зависимостей также воссозданный при смене источника.

Эта схема выполнения этого правила не изменяет ваше правило для создания объектных файлов, зависимости генерируются в дополнительном вызове компилятора. Существуют также альтернативы, выполняющие генерацию кода и зависимости в одном прогоне. Выше было то, что мне нравится.

+0

Если бы я просто знал, как сделать местный чат. Иногда появляется соответствующее сообщение со ссылкой, но я до сих пор не понял, когда и как сделать это самостоятельно. Однажды я действительно должен прочитать FAQ. – Olaf

Смежные вопросы