Если у вас GNU make 4.2 или выше, вы можете использовать функцию $(file <zfile1)
. См. https://www.gnu.org/software/make/manual/html_node/File-Function.html
Если у вас нет достаточно новой версии GNU make, вы не сможете этого сделать. Конечно, в вашем примере вообще нет необходимости помещать содержимое файла в переменную make: вы можете просто заставить свой рецепт использовать сам файл. Но, возможно, ваш реальный вариант использования не так прост.
ETA
Вы никогда не должны использовать ни функцию make eval
, ни функцию make shell
в рецепте [1].
Вы можете просто написать:
v1 := $(file <zfile1)
.ONESHELL:
a:
@echo "$(v1)"
Вы должны иметь .ONESHELL
, потому что в противном случае каждая строка рецепта (после того, как он разложится на несколько строк) считается отдельной строкой рецепта. Обратите внимание, что .ONESHELL
действует для всего процесса создания, поэтому может привести к разрыву других рецептов, если они полагаются на каждую строку, вызываемую в другой оболочке.
Другой вариант - экспортировать результат в среду, и используйте переменную оболочки, подобную этой:
export v1 := $(file <zfile1)
a:
@echo "$$v1"
Возможно, есть лучшие способы сделать это, но поскольку вы дали нам только этот пример, а не то, что вы действительно хотите сделать, это все, что мы можем сказать .
[1] Бывают случаи, когда это может быть полезно, но если у вас достаточно изощренное требование для этого, вы, вероятно, знаете, как его использовать.