2013-11-01 2 views
2

У меня есть заголовок * .H C++ в папке include/C++, но даже если я изменил эти файлы, make не делает снова, что я могу изменить в Makefile, чтобы переделать, когда эти файлы были изменены?Как перекомпилировать при изменении заголовка C++?

+2

Добавить заголовки в зависимости от вашего правила построения. – greatwolf

+2

http://scottmcpeak.com/autodepend/autodepend.html – BoBTFish

+1

Вы пишете свой 'Makefile' вручную или используете генератор, например CMake? – thokra

ответ

6

Если вы используете GNU сделать, и GCC, а также строительство отдельных объектов для каждого источника (а не строить программу непосредственно из всех источников) вы можете создать необходимые зависимости автоматически. Добавьте следующие аргументы командной строки компилятора:

-MD -MP 

-MD будет генерировать .d файл рядом с каждым объектом, содержащий правила, задающие сделать все заголовки, это зависит от. Вместо этого вы можете использовать -MMD, чтобы исключить системные заголовки (в том числе <>, а не ""), если вы не ожидаете их изменения. -MP будет генерировать фиктивные правила, чтобы гарантировать, что цель будет восстановлена, если какой-либо из заголовков будет удален.

Затем укажите все файлы .d из файла makefile, используя -include, так что это не ошибка, если они отсутствуют. Я делаю это, преобразовывая список объектных файлов:

-include $(all_objs:.o=.d) 
2

Просто убедитесь, что ваша цель зависит от ваших заголовков.

your_app: $(SOURCES) $(HEADERS) 
    $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(SOURCES) $(LIBS) [email protected] 
+2

Это прекрасно, если вы не возражаете перестраивать все, когда меняется какой-либо заголовок. Однако было бы неплохо восстановить только столько, сколько вам нужно. –

+0

@MikeSeymour: Вот почему я не понимаю, почему люди все еще пишут свои собственные Makefiles - если у них нет веской причины. Вы можете получить так много вещей неправильно. – thokra

+0

@MikeSeymour: Согласен. Обычно я доволен этим подходом при проведении некоторых исследований. В реальных проектах я предпочитаю использовать автоматическое создание файлов и отслеживание зависимостей. – dnk

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