如何在makefile 的自动变量后追加后缀?

how to append suffix after makefile's automatic variable?

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

有没有办法做到这一点?

问题

自动变量 $^ 在您的例子中是一个 space 分隔的元素列表,因为它扩展为 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 添加到 space 分隔列表的每个元素,不仅仅是最后一个。


解决方案

GNU Make 的 addsuffix 内置函数确实适用于列表:

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

生成您正在寻找的输出。