12
votes

When I define a custom function in a Makefile, like this

define add_target
${1}: ${2} ${3}
endef

How can I get a list of all arguments, that have been provided to $(call add_target, ...)?

So this $(call add_target, A, B) will be expanded to A: B and this $(call add_target, A, B, C, D) will be expanded to A: B C D

GNU manual only says that

When make expands this function, it assigns each param to temporary variables $(1), $(2), etc. The variable $(0) will contain variable. There is no maximum number of parameter arguments.

but nothing about how to get all params.

1

1 Answers

15
votes

There is no way, except by writing out $1 $2 $3 $4 $5 $6 ... Of course no matter how many variables you enumerate the caller could have used more.

However, in your example the simplest thing to do is just pass two arguments: the target name and the prerequisite list (as a single argument). So it would be:

define add_target
${1}: ${2}
endef

... $(call add_target, A, B)
... $(call add_target, A, B C D)

(no commas separating the prerequisites in the list)