#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 Спасибо