Paolo Bonzini <pbonz...@redhat.com> writes: > 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)
Confirms my findings. > As an aside, target-obj-y seems unnecessary to me. I have no idea :) $ git-grep target-obj-y Makefile.objs:target-obj-y += trace/ Makefile.target:target-obj-y := Makefile.target:dummy := $(call unnest-vars,,target-obj-y) Makefile.target:target-obj-y-save := $(target-obj-y) Makefile.target:target-obj-y := $(target-obj-y-save) Makefile.target:all-obj-y += $(target-obj-y) trace/Makefile.objs:target-obj-y += generated-helpers.o trace/Makefile.objs:target-obj-y += control-target.o >> Perhaps unnest-vars could be more hygienic. > > Macro hygiene and Make in the same sentence? (well, not sentence but > still...). You're right. My "perhaps could" should be read like "Perhaps we could make pigs fly, if we apply enough force, say with a trebuchet". >> 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. Thanks! > 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. Concur. It's actually not bad most of the time. Once in a great while, I need to do something more fancy, and then I'm prone to waste a few hours on (re-)learning how to work with the magic.