Со следующим Makefile сниппета:Makefile развязаны зависимости
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
Если я просто изменить один файл, только этот файл получить перекомпилированы, когда я повторно сделать, как хотелось бы. Однако мне сложно обобщить это, не перечисляя каждый файл по отдельности. Когда я пытаюсь что-то вроде:
$(OBJECTS): $(SOURCES)
$(CC) $(CFLAGS) -o [email protected] -c $(patsubst %.o,%.cc,[email protected])
Он строит каждый объектный файл по отдельности, но каждый объектный файл зависит от всех моих источников, поэтому изменение в одном файле, вызывая полные перекомпиляции. Что хорошего для этого?
https://www.gnu.org/software/make/manual/html_node/Pattern-Rules.html –
['$ <'] (http://www.gnu.org/software/make/manual/ make.html # Automatic-Variables) более кратким, чем '$ (patsubst% .o,% .cc, $ @)' – Beta