如何在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