Со следующим фрагментом make-файла:
main: main.o f1.o f2.o
$(CC) $(CFLAGS) -o program main.o f1.o f2.o
main.o: main.cc
$(CC) $(CFLAGS) -c main.cc
f1.o: f1.cc
$(CC) $(CFLAGS) -c f1.cc
f2.o: f2.cc
$(CC) $(CFLAGS) -c f2.cc
Если я просто изменю один файл, только этот файл будет перекомпилирован, когда я перезапущу make по желанию. Однако мне трудно обобщить это, не перечисляя каждый файл по отдельности. Когда я пытаюсь что-то вроде:
$(OBJECTS): $(SOURCES)
$(CC) $(CFLAGS) -o $@ -c $(patsubst %.o,%.cc,$@)
Он строит каждый объектный файл отдельно, но каждый объектный файл зависит от ВСЕХ моих исходников, поэтому изменение любого файла вызывает полную перекомпиляцию. Как это сделать?