Частично раскрывающиеся рекурсивно раскрытые переменные - PullRequest
0 голосов
/ 25 января 2019

Рассмотрим следующий пример 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) 

1 Ответ

0 голосов
/ 25 января 2019

Ну, вы могли бы сделать это:

simplevar := $(varname)
val = $($(simplevar)-value)
...