Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
That subdir makefile is extending the list of subdirectories and object files that is maintained by the top-level directory. Personally, I prefer a single top-level Makefile using shell find to do that for me so I don't have to maintain more than one Makefile, or register added sources somehow.
Your way has the advantage of ignoring any temporary source files you might have floating around, though.
Every good solution is obvious once you've found it.
I prefer a mix between the two. I use one top-level makefile which builds the bootloader, kernel, modules, userspace libraries etc. Each major component (the kernel, bootloader, each module etc) has its own makefile which specifies the directory tree and sources. That way one can have temporary files hanging around and also all the sources are specified in one place.
In the toplevel rules.mk, I found a statement "include makefile". I cannot figure out how "make" find the full path to the objects since each sub-dir makefile only specifies the object name. The attached is the zip file of toplevel makefile & rules.mk and subdir makefile & rules.mk. They are taken out from the xen-3.1.0 source tar ball.