''
我想在自动变量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
有没有办法做到这一点?
答案 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
产生您想要的输出。