Эта проблема уже была сообщена сопровождающим GNU make:
http://savannah.gnu.org/bugs/?28230
Она была закрыта со следующим комментарием:
Как упоминает Филипп, это предполагаемое / документированное поведение.
Я рекомендую использовать «include», а не eval;пусть ваш сценарий запишет файл, а затем включит этот файл.
ДОБАВЛЕНО : Обходной путь есть!Вот пример GNUmakefile (замените 8 пробелов символами табуляции; да, после define newline
есть две пустые строки):
define newline
endef
$(eval $(subst #,$(newline),$(shell { echo 'war:'; echo ' echo "not love?"'; echo ' echo "Give peace a chance!"'; } | tr '\n' '#')))
В общем, это $(eval $(subst #,$(newline),$(shell myscript | tr '\n' '#')))
Вы должны выбратьсимвол, который не появится в выходных данных скрипта;#
кажется хорошим кандидатом.