@MadScientist 的建议是非常正确的,但在这种特定情况下,我认为它不用于传递参数,而是用于这些命令的顺序调用。
这是我的理解(如有错误请指正)
This is where the variable is called:
$$(call concat_cmd,$$(KERNEL))
1- concat_cmd 将调用 split_args 并将变量 KERNEL 和 build_cmd 传递给它:
define concat_cmd
$(call split_args,$(1),build_cmd)
endef
2- split_args 将| 替换为空格并调用build_cmd,
define split_args
$(foreach data, \
$(subst |,$(space),\
$(subst $(space),^,$(1))), \
$(call $(2),$(strip $(subst ^,$(space),$(data)))))
endef
3- 最后,因为KERNEL 被定义为KERNEL := kernel-bin | patch-cmdline | lzma | uImage lzma,build_cmd 将扩展为Build/kernel-bin Build/ patch-cmdline ...