Search code examples
makefilegnu-make

Makefile call function. How to get all arguments


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:

  • $(call add_target, A, B) will be expanded to A: B
  • $(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.


Solution

  • 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)