如何在没有评估的情况下将变量赋值给变量?

问题描述 投票:0回答:1

通过向您展示一些代码来解释我的问题要容易得多。

这里是:

FILES = $(F1)
A.FILES = $(FILES)

FILES = $(F2)
B.FILES = $(FILES)

F1 := file1
F2 := file2

all: a b

a: $(A.FILES)
    echo $^

b: $(B.FILES)
    echo $^

$(F1) $(F2):
    echo $@

问题是调用make a打印file2而不是file1。如何使用名为FILES的变量维护指定A.FILES?我知道,:=会完成这项工作,但我可能会稍后定义F1。我想有一些允许有以下内容的东西:

FILES = $(F1)
A.FILES <- FILES (assignation) such that A.FILES = $(F1)

谢谢!

gnu-make
1个回答
1
投票

没有直接的方法来做到这一点。你可以做一些棘手的事情让它发挥作用,像这样:

F = $(F1)
A := $(value F)

F= $(F2)
B := $(value F)

F1 = foo
F2 = bar

$(eval A := $(A))
$(eval B := $(B))

all: ; @echo 'A=$(A) B=$(B)'

但没有其他办法可以做到这一点。

实际上alain提供了一个更好的解决方案:

F = $(F1)
$(eval A = $(value F))

F= $(F2)
$(eval B = $(value F))

F1 = foo
F2 = bar

all: ; @echo 'A=$(A) B=$(B)'
© www.soinside.com 2019 - 2024. All rights reserved.