С помощью этого Makefile я не уверен, почему я получил недостающую ошибку разделителя.Отсутствует отдельная ошибка из make-файла
define foo
$(eval a := $(1))
$(eval b := $(1))
endef
$(call foo,hello)
$(info $(a))
$(info $(b))
all: ;
Если я однако заменяет первое Eval с этим,
$(eval a := $(1)) \
то ошибка уходит. eval
не раскрывается ни к чему, и он доволен только одной оценкой внутри define
. Но я не уверен, почему он жалуется в этом случае, и почему задняя косая черта решает его.
Вам не нужно полосу или Eval, если вы назначаете результаты в переменной; это нормально для переменной, содержащей символ новой строки (действительно, 'fooBody' уже делает ...) – MadScientist
strip и eval для случаев, когда результат вызова функции не присваивается переменной. –
О, я понимаю, что вы имеете в виду, это заменяет foo не вызовом foo. Гектометр Лично мне это не нравится: это сбивает с толку. Я понимаю, что это позволяет вам просто использовать 'foo'. Лично я не поклонник всей идиомы добавления eval в такие переменные; обычным способом было бы просто назначить задания в 'foo' и eval результаты вызова. Но, возможно, в реальных make-файлах это имеет больше смысла. – MadScientist