Рассмотрим следующий пример make-файла:
all:;
varname := a
val = $($(varname)-value)
a-value := AAA
b-value := BBB
$(info val: $(val))
varname := b
$(info val: $(val))
Как и ожидалось, выполнение make
на этом make-файле приводит к:
val: AAA
val: BBB
, поскольку val
является рекурсивно раскрытая переменная , ее расширение происходит при обращении (т. Е. $(val)
).
В момент определения переменной val
переменная a-value
не определенаеще.Следовательно, определение val
в качестве просто расширенной переменной вместо этого (т. Е. С :=
вместо =
):
val := $($(varname)-value)
приводит к $($(varname)-value)
будучи немедленно расширяется до пустой строки, что, в свою очередь, приводит к пустой $(val)
.
Я хотел бы знать, есть ли способ немедленно развернуть varname
в определении val
, но отложить расширение результата до момента, когда val
равен , на который ссылается , как если бы val
были фактически определены в make-файле выше как:
val = $(a-value)