当我在Makefile中定义自定义函数时,就像这样
define add_target
${1}: ${2} ${3}
endef
Run Code Online (Sandbox Code Playgroud)
如何获得已提供给所有参数的列表$(call add_target, ...)?
所以这$(call add_target, A, B)将扩展到A: B
,$(call add_target, A, B, C, D)并将扩展到A: B C D
GNU手册只说明了这一点
当make扩展此函数时,它会将每个参数分配给临时变量$(1),$(2)等.变量$(0)将包含变量.没有最大数量的参数参数.
但没有关于如何获得所有参数.
没有办法,除了写出来$1 $2 $3 $4 $5 $6 ... 当然无论你枚举多少变量,调用者都可以使用更多.
但是,在您的示例中,最简单的方法是传递两个参数:目标名称和先决条件列表(作为单个参数).所以它会是:
define add_target
${1}: ${2}
endef
... $(call add_target, A, B)
... $(call add_target, A, B C D)
Run Code Online (Sandbox Code Playgroud)
(没有逗号分隔列表中的先决条件)