在手册中:
eval 函数非常特殊:它允许您定义非常量的新 makefile 结构;这是评估其他变量和函数的结果。eval 函数的参数被扩展,然后扩展的结果被解析为 makefile 语法。
重要的是要意识到 eval 参数被扩展了两次。首先由 eval 函数,然后在将其解析为 makefile 语法时再次扩展该扩展的结果。这意味着您在使用 eval 时可能需要为“$”字符提供额外的转义级别。
“扩大了两次”让我感到困惑。
例如,我创建了一个 makefile :
define func
tmp = $(OBJPATH)/$(strip $1)
objs += $$(tmp)
$$(tmp) : $2
gcc $$^ -o $$@
endef
all : foo
$(eval $(call func, foo, 1.c))
eval 函数将如何扩展?