GNU make: какая разница между eval funciton и расширением переменной в makefile напрямую - PullRequest
0 голосов
/ 19 мая 2019

Makefile определяет многострочную переменную, которая определяет правило, ссылается на него функцией eval, отлично работает:

define a
b: 
        echo b
endef

$(eval $(a))

точный результат:

$ make 
echo b 
b

, но не удалось, если ссылочная переменная напрямую:

define a :=
b: 
        echo b
endef

$(a)

выполнить make не удастся:

make: *** Нет правила для создания цели 'echo', необходимой для 'b'. Стоп.

но если я напишу правило в одну строку, это сработает:

define a :=
b: ; echo b
endef

$(a)

Марка в порядке:

$ make
echo b
b

почему многострочная переменная нам нужна функция eval, что делает GNU при непосредственном расширении переменной в make-файл.

Я не нашел материала об этом во всем руководстве по сборке GNU.

...