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

时间:2019-03-18 08:41:01

标签: 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

有没有办法做到这一点?

1 个答案:

答案 0 :(得分: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添加到该空格分隔列表的每个单个元素中,而不只是最后一个。一。


解决方案

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

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

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

在上面的生成文件上运行make

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

产生您想要的输出。