如何在makefile';什么是自动变量?
我想在自动变量如何在makefile';什么是自动变量?,makefile,gnu-make,Makefile,Gnu Make,我想在自动变量$^ 然而,即使我使用$^.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 不是, 有什么方法可以做到这一点吗?问题 在您的例子中,自动变量是一个以空格分隔的元素列表,因为它扩展到a.o b.o c.o。 因此,echo$^.bc将导致a.o b.o c.o.bc而不是a.o.bc
$^
然而,即使我使用$^.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
不是,
有什么方法可以做到这一点吗?问题
在您的例子中,自动变量是一个以空格分隔的元素列表,因为它扩展到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的内置函数对列表有效:
a.o.bc b.o.bc c.o.bc
在上面的makefile上运行make
:
OBJS := a.o b.o c.o
rule: $(OBJS)
@echo $^
@echo $(addsuffix .bc,$^)
生成您正在查找的输出。使用GNU make,您可以使用:
$(addsuffix.bc,$^)
.addsuffix解决了我的问题,它为我提供了a.o.bc b.o.bc c.o.bc厚度
OBJS := a.o b.o c.o
rule: $(OBJS)
@echo $^
@echo $(addsuffix .bc,$^)
$ make
a.o b.o c.o
a.o.bc b.o.bc c.o.bc