Проблема в том что make сам не умеет строить зависимости файлов с исходными кодами от заголовочных файлов. То есть, например, строим бинарный файл из foo.cpp, в который, с помощью директивы include включен bar.h. Простейший makefile будет выглядить как-то так:
Включаемый файл bar.h нигде не упоминается, и если мы его изменим, цель пересобрана не будет. Чтобы этого не происходило, надо указать bar.h в зависимостях рядом с foo.cpp. Однако вручную перечислять в зависимостях все включаемые заголовочные файлы практически нереально.
1 2 3 4 | all: test test: foo.cpp g++ foo.cpp -o test |