Hello DaveK,
I was going though the GNU Make mailing list & somehow stumbled upon a
very-oldquery that you had posted on this list.
You were reporting a problem due to comma variables. But actually the problemis
not that, rather it is the age-old problem of make allowing the use of
undefinedvariables to collapse into an empty string!
The culprit is on line #10 and 11.On line-11, the variable
`LIST2_WITHOUT_COMMAS' is used whereas a line beforeon line-10,
`LIST_WITHOUT_COMMAS' is initialized. Due to which an empty stringis output.
We could prevent such issues by not resorting to creating new variables for
intermediateresults, like as,
> 10 LIST_WITHOUT_COMMAS:=$(filter-out $(IMMCOMMA),$(LIST_WITH_COMMAS))>
> 11 $(warning $(LIST2_WITHOUT_COMMAS))
$(warning $(filter-out $(IMMCOMMA),$(LIST_WITH_COMMAS)))
Or, with a newer version of GNU make, there is an option
"--warn-undefined-variables"which when run on your makefile "comma.mk" will
blurt out:
$ make --warn-undefined-variables -f comma.mk
comma.mk: 11: warning: undefined variable 'LIST2_WITH_COMMAS'
With regards, Rakesh S.
P.S.: By any chance, are you the David Korn of the Kornshell ?
>On 19 April 2007 14:06, Paul Smith wrote:>>> On Thu, 2007-04-19 at 13:15
>+0100, Dave Korn wrote:>>>>> The obvious first approach - escape the comma so
>that filter-out doesn't>>> think it's the separator between its two arguments
>- just doesn't work. I>>> can't quite see how to achieve this in make....>>>>
>Using backslashes as an escape character in make is pretty ad hoc; it>>
>definitely does not work everywhere you expect it to (unfortunately).>> I
>wondered if that might be the case.>>> However, you should be able to do it
>with variables:>>>> COMMA = ,>> LIST_WITHOUT_COMMAS:=$(filter-out
>$(COMMA),$(LIST_WITH_COMMAS))>> Doesn't actually work in practice: as Danny
>pointed out, filter-out only>matches entire words, but using a variable
>enabled subst to work.>>/tmp $ cat -n comma.mk> 1> 2
>LIST_WITH_COMMAS:= foo, bar, baz, quux> 3> 4 COMMA = ,> 5
>IMMCOMMA:= ,> 6> 7 LIST_WITHOUT_COMMAS:=$(filter-out
>$(COMMA),$(LIST_WITH_COMMAS))> 8 $(warnin
g $(LIST_WITHOUT_COMMAS))> 9> 10 LIST_WITHOUT_COMMAS:=$(filter-out
$(IMMCOMMA),$(LIST_WITH_COMMAS))> 11 $(warning $(LIST2_WITHOUT_COMMAS))>
12> 13 LIST3_WITHOUT_COMMAS:=$(subst $(COMMA), ,$(LIST_WITH_COMMAS))> 14
$(warning $(LIST3_WITHOUT_COMMAS))> 15> 16
LIST4_WITHOUT_COMMAS:=$(subst $(IMMCOMMA), ,$(LIST_WITH_COMMAS))> 17
$(warning $(LIST4_WITHOUT_COMMAS))> 18> 19> 20> 21 all:> 22
@>/tmp $ /bin/make -f comma.mk>comma.mk:8: foo, bar, baz,
quux>comma.mk:11:>comma.mk:14: foo bar baz quux>comma.mk:17: foo bar baz
quux>make: `all' is up to date.>> Thanks to all :)>> cheers,>
DaveK>-->Can't think of a witty .sigline today....
_______________________________________________
Help-make mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/help-make