как добавить суффикс после автоматической переменной makefile?

#makefile #gnu-make

#makefile #gnu-make

Вопрос:

 OBJS := a.o b.o c.o

rule : $(OBJS)
  @echo $^
  @echo $^.bc // @echo a.o.bc b.o.bc c.o.bc -> what I want to do
  

Я хочу добавить суффикс после автоматической переменной $^

Однако, несмотря на то, что я использую $^.bc , он показывает

 a.o b.o c.o.bc
  

не,

 a.o.bc b.o.bc c.o.bc
  

Есть ли какие-либо способы сделать это?

Комментарии:

1. с GNU make вы можете использовать addsuffix функцию : $(addsuffix .bc,$^) .

Ответ №1:

Проблема

Автоматическая переменная $^ в вашем случае представляет собой список элементов, разделенных пробелом, поскольку он расширяется до 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 к каждому отдельному элементу этого списка, разделенного пробелом, а не только к последнему.


Решение

addsuffix Встроенная функция GNU Make работает со списками:

 OBJS := a.o b.o c.o

rule: $(OBJS)
    @echo $^
    @echo $(addsuffix .bc,$^)
  

Выполняется make в приведенном выше makefile:

 $ make
a.o b.o c.o
a.o.bc b.o.bc c.o.bc
  

выдает результат, который вы ищете.

Комментарии:

1. addsuffix решает мою проблему, которая дает мне a.o.bc b.o.bc c.o.bc Спасибо