如何在不评估的情况下将变量分配给变量?
How to assign a variable to a variable without evaluation?
通过向您展示一些代码更容易解释我的问题。
这里是:
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)
谢谢!
没有直接的方法可以做到这一点。你可以做一些棘手的事情来让它工作,像这样:
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)'
但没有其他办法。
预计到达时间
实际上 给出了一个更好的解决方案:
F = $(F1)
$(eval A = $(value F))
F= $(F2)
$(eval B = $(value F))
F1 = foo
F2 = bar
all: ; @echo 'A=$(A) B=$(B)'
通过向您展示一些代码更容易解释我的问题。
这里是:
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)
谢谢!
没有直接的方法可以做到这一点。你可以做一些棘手的事情来让它工作,像这样:
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)'
但没有其他办法。
预计到达时间
实际上
F = $(F1)
$(eval A = $(value F))
F= $(F2)
$(eval B = $(value F))
F1 = foo
F2 = bar
all: ; @echo 'A=$(A) B=$(B)'