Вы должны добавить все зависимости в ваш Makefile:
mycode.o: mycode.cpp mycode.h somelib.h resources.h
$(CXX) -c -o $@ $< $(CXXFLAGS) $(INCLUDES)
Если у вас уже есть общая командная строка для сопоставления с образцом, вам не нужно повторять команду, вы можете просто перечислить зависимости:
%o: %.cpp
$(CXX) -c -o $@ $< $(CXXFLAGS) $(INCLUDES)
mycode.o: mycode.cpp mycode.h somelib.h resources.h
yourcode.o: yourcode.cpp yourcode.h mycode.h somethingelse.h
# ...
В общем, это ужасный и не поддающийся проверке беспорядок. Вы почти наверняка захотите, чтобы система сборки более высокого уровня сгенерировала Makefile для вас. Даже для очень маленьких проектов поддержание актуальности зависимостей заголовка в Makefile - такая боль, что это просто не стоит.
Существует несколько популярных портативных сред сборки. Мне лично очень нравится cmake
, который включает в себя обнаружение, если вы изменили настройки сборки (скажем, с Debug на Release), и всегда буду собирать все необходимые файлы (например, если вы измените мастер-файл cmake и наберете «make») сначала автоматически запустим cmake для вас).
Для решения только для Unix вы можете попробовать makedepend
или печально известную autotools
, хотя это совсем другая головная боль ...