如何在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
生成您正在寻找的输出。
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
生成您正在寻找的输出。