Проблема
Автоматическая переменная $^
в вашем случае представляет собой разделенный пробелами список элементов, поскольку он расширяется до a.o b.o c.o
.Следовательно, echo $^.bc
приведет к a.o b.o c.o.bc
вместо a.o.bc b.o.bc c.o.bc
, поскольку суффикс .bc
добавляется только к последнему элементу списка, т. Е. c.o
.
Если вы хотитеполучить a.o.bc b.o.bc c.o.bc
, тогда вам нужно добавить суффикс .bc
к каждому отдельному элементу этого разделенного пробелами списка , а не только последнему.
Решение
Встроенная функция GNU Make addsuffix
работает со списками:
OBJS := a.o b.o c.o
rule: $(OBJS)
@echo $^
@echo $(addsuffix .bc,$^)
Запуск make
в make-файлевыше:
$ make
a.o b.o c.o
a.o.bc b.o.bc c.o.bc
производит вывод, который вы ищете.