Синтаксис, который вы показали, называется GNU make на языке шаблонов и является краеугольным камнем вашего решения. Все, что вам нужно, это добавить способ динамического получения списка файлов .C. Другие показали решения, которые используют $(shell)
для этого, но это излишне неэффективно. Вместо этого я предлагаю использовать $ (подстановочный знак), встроенную в GNU make функцию, предназначенную именно для этой цели:
SRCS = $(wildcard *.C)
OBJS = $(patsubst %.C,%.o,$(SRCS))
foo: $(OBJS)
$(CC) -o $@ $^
%.o: %.C
$(CC) $(CPFLAGS) -c $<
Если вы ищете что-то более лаконичное, сработает также следующее:
foo: $(patsubst %.C,%.o,$(wildcard *.C))
Это просто исключает переменные и использует тот факт, что GNU make предоставляет правило шаблона %.o: %.C
по умолчанию, а также правило по умолчанию для связывания исполняемого файла вместе из набора объектов. Лично я бы использовал более многословную версию, так как мне легче читать и поддерживать, но каждому свою.
Надеюсь, это поможет,
Эрик Мелски