help-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Macro expansion


From: Paul Smith
Subject: Re: Macro expansion
Date: Wed, 21 Sep 2011 10:37:21 -0400

On Wed, 2011-09-21 at 02:18 -0700, MD.Mahbubur Rahman wrote:
> The following code works if the hi lighted change is made:
> 
> define program-variables
> $1_sources = $(filter %.c,$2)
> $1_headers = $(filter %.h,$2)
> $1_objects = $(subst .c,.o,$(filter %.c,$2))
> $($1_objects): $($1_headers)
> endef
> ls: $(ls_objects)
> $(eval $(call program-variables,ls,ls.c ls.h glob.c glob.h))
> 
> Can some one help me why this is needed to make the code works???

In GNU make, normal functions must expand to no more than one logical
line.  The entire expansion, even if it contains newlines, is treated as
a single logical line.

That's why the original call did not work, because the
"program-variables" variable contained newlines but when it was expanded
by call it was treated as a single line.  Hence the syntax error.

The only exception to the above rule is the eval function: that function
reads the value as if it were a real makefile, so it can parse multiple
lines.  Thus passing a complex, multiline expression (from the expansion
of call, or not, it doesn't matter) to eval does what you want.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]