eval函数
eval是shell的内建函数,这条命令的重点在于将所有参数用空格连接起来,然后重新解析并执行这条命令。
例如:
$(eval h_m := $(filter-out $(h_r), $(h_m)))
会解析执行 h_m := $(filter-out $(h_r), $(h_m)) 命令,相当于定义了一个变量并赋值。
通常和宏代码块和foreach循环函数配合使用,例如:
#$(foreach m, list, comment)
define add-all-target-to-target-required-modules-deps
$(foreach m,$(ALL_MODULES), \
$(eval r := $(ALL_MODULES.$(m).REQUIRED)) \
$(if $(r), \
$(eval r := $(call module-installed-files,$(r))) \
$(eval t_m := $(filter $(TARGET_OUT_ROOT)/%, $(ALL_MODULES.$(m).INSTALLED))) \
$(eval t_r := $(filter $(TARGET_OUT_ROOT)/%, $(r))) \
$(eval t_m := $(filter-out $(t_r), $(t_m))) \
$(if $(t_m), $(eval $(call add-required-deps, $(t_m),$(t_r)))) \
) \
)
endef