正如我在评论中提到的,@Beta和@claytontstanley 的答案已经足够好了,我个人会使用他们的解决方案之一。
如果您更喜欢获取可变参数的通用方式,那么以下内容可以帮助您。
警告:下面有很多魔法和肮脏的黑客。
# 扩展为出现在
# 当前调用上下文。
参数= \
$(评估 __arg_tmp := \
$(call __args_strip_tail,$(foreach __a,.1,$(__args_list))))$(__arg_tmp)
# 非空参数引用的列表,例如$(1),,$(3),,,
# Context: __a - 当前正在处理的参数的编码编号。
__args_list = \
$(if $(__arg_value),$(__arg_ref))$(foreach __a,$(call inc,$(__a)) \
,$(if $(__arg_simple),$(comma)$(eval __arg_tmp := \
$(值 __args_list))$(__arg_tmp)))
__arg_value = $(value $(call to_dec,$(__a)))
__arg_ref = $${$(call to_dec,$(__a))}
__arg_simple = $(findstring simple,$(flavor $(call to_dec,$(__a))))
# 用作 GNU Make 'call' 中的错误的解决方法。
# ${1},,${3},,, -> ${1},,${3}
__args_strip_tail = $(subst } ,},$(call nolastword,$(subst },} ,$1,)))
# 一些有用的东西...
逗号 := ,
nolastword = $(wordlist 2,$(words $1),x $1)
# 将 .4.2 解码为 42
to_dec = $(subst .,,$1)
# 增加给定的数字。
# 1. 数字之间有句点的小数:42 是 .4.2
公司=\
$(call __inc$(suffix .0$1),$(basename $1))
__inc.0 = $1.1
__inc.1 = $1.2
__inc.2 = $1.3
__inc.3 = $1.4
__inc.4 = $1.5
__inc.5 = $1.6
__inc.6 = $1.7
__inc.7 = $1.8
__inc.8 = 1.9 美元
__inc.9 = $(call inc,$1).0
测试它:
func = Func $0 调用 args [ $(args) ]
foo = $(func)
bar = $(调用函数,ar,baz,boo)
$(警告 $(调用 foo,a1,a2,a3,a4))
$(警告 $(call bar,a1,a2,a3,a4))
输出是:
Makefile:49: Func foo called with args [a1,a2,a3,a4]
Makefile:50: Func func called with args [ar,baz,boo]