Стандартный подход заключается в автоматической генерации зависимостей заголовка при компиляции.
Для первой компиляции не требуется никаких зависимостей, так как каждый исходный файл должен быть скомпилирован. Последующие перекомпиляции загружают зависимости, сгенерированные предыдущей компиляцией, чтобы определить, что нужно перекомпилировать.
Ваш $(MyNotGCCCompiler)
может иметь параметр командной строки для создания файла зависимостей.
При использовании gcc
работает так:
.SUFFIXES:
SRC := $(wildard ./src/*.c)
OBJ := $(SRC:%.c=%.o)
DEP := $(OBJ:%.o=%.d)
all: $(OBJ)
# when compiling produce a .d file as well
%.o: %.c
gcc -c -o $@ $(CPPFLAGS) $(CFLAGS) -MD -MP -MF ${@:.o=.d} $<
# don't fail on missing .d files
# there won't be any on the first run
-include $(DEP)