How to do variadic macros with $(call ...) in GNU Make

gnu-make, macros, variadic-macros

Solution

Here is a remix on Beta's solution:

TODO_MSG = $(warning TODO: $(1))

test:
        $(call TODO_MSG, $(strip This part displays fine, and this does too))

If there was an $(identity ...) function for Make, I'd use that; $(strip ...) was the closest I could find.

Problem

I created a macro for use in makefiles along the lines of: ``` TODO_MSG = $(warning TODO: $(1)) $(call TODO_MSG, This part of the msg displays fine, but this part does not) ``` I can get around it with something like the following: ``` BLAH := $(shell perl -e 'print join( " ", 2..200 )' COMMA := , TODO_MSG = $(warning TODO:$(1)$(strip $(foreach x,${BLAH},$(if $(${x}),${COMMA}$(${x})))) ``` ... but I'm curious whether there is anything offering more explicit support for variadic macros.

Original source