Как присвоить переменную переменной без оценки? - PullRequest
0 голосов
/ 03 апреля 2019

гораздо проще объяснить мою проблему, показывая вам некоторый код.

Вот оно:

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 печатает файл2 вместо файла1. Как я могу сохранить указание A.FILES с переменной с именем FILES? Я знаю,: = сделал бы эту работу, но я могу определить F1 позже. Я хотел бы иметь что-то, что позволяет иметь следующее:

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

Спасибо!

1 Ответ

1 голос
/ 03 апреля 2019

Нет простого способа сделать это. Вы можете сделать некоторые хитрые вещи, чтобы заставить его работать, как это:

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)'

но другого способа сделать это нет.

ETA

На самом деле Ален дает еще лучшее решение:

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

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

F1 = foo
F2 = bar

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