On 15/02/19 08:53, Markus Armbruster wrote: > This time, $(obj-y) is very much not blank, and... > > @qapi/ final qapi-introspect.o qapi-types-target.o qapi-types.o > qapi-visit-target.o qapi-visit.o qapi-events-target.o qapi-events.o > qapi-commands-target.o qapi-commands.o > [Trailing make output elided] > > ... qapi/Makefile.obj-y *does* clobber it. Oww. > > How come this works anyway?
It works because at this point obj-y is not used anymore, it is assigned to all-obj-y a couple lines before: all-obj-y := $(obj-y) As an aside, target-obj-y seems unnecessary to me. > Perhaps unnest-vars could be more hygienic. Macro hygiene and Make in the same sentence? (well, not sentence but still...). > But that's not my immediate > concern. All I want to know right now is whether I should refrain from > = and := in Makefile.objs. Paolo, Fam? No, there is no need for that. Really the answer is that we are kind of pushing Makefiles to the limit here. We do get good expressiveness, but at the cost of hiding things behind black magic. In the end I think it's a net benefit, but the cost does exist. Paolo