Am 01.07.2013 16:43, schrieb Michael Tokarev: > 01.07.2013 17:39, Paolo Bonzini wrote: >> What used to be there was something like >> >> net-obj-y = foo.o bar.o >> common-obj-y += $(addprefix net/, $(net-obj-y)) >> >> and this has been replaced by net/Makefile.objs and friends. > > Maybe we should just list them all in a single makefile after all, > with proper paths > > common-obj-y += net/foo.o net/bar.o block/baz.o > > and be done with it, without the need to put them in > different makefiles and without re-merging them back > in a non-trivial way during make invocation? It isn't > much typing really, and it is rather obvious this way > and easy to deal with. > > And for every program we build, > > $(PROGRAM)-obj = program.o $(foo-objs-y) $(bar-objs-y) > > etc. > > Why do we re-merge them back making things shorter to > write (without paths), non-obvious and half-working? > (by "half" i mean that some variables gets prefixed > while some arent). > > Something similar for a (softmmu|user) target too, with > maybe even all target variations listed in a single > top-level makefile. > >> This should not be undone, but it is completely different from what you >> are trying to do. You need a much more fine-grained assignment of >> libraries to object files. >> >> I think the build system parts are hard because we haven't found the >> right design. > > What's wrong with a single makefile for everything, except > of the need to use full pathnames from the top-level source > dir?
In short the problem we ran into was missing *.d inclusions. This got fixed by automatically expanding net/ to -include net/Makefile.objs and -include net/*.d or so. Andreas -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg