* Bollinger, John C wrote on Fri, Sep 11, 2009 at 09:09:18PM CEST: > > Automake's cross-directory support seems to have at least one serious > > problem, however: Makefiles generated by the autotools always build > > intermediate objects in the top source directory. For example, if I > > am building ./subpackage1/foo from ./subpackage1/foo.c and > > ./subpackage1/init.c, then the intermediate foo.o and init.o files are > > created in the top source directory (./foo.o and ./init.o), instead of > > in ./subpackage1/. Aside from the mess, this presents a grave risk of > > incorrect builds, for if I also have subpackage2/init.c (or > > subpackage2/init.f, etc.) then that wants to use the same name and > > location for its intermediate .o file as does subpackage1/init.c.
Besides subdir-objects, automake should also warn you about this situation: | Makefile.am: object `foo.$(OBJEXT)' created by `s2/foo.c' and `s1/foo.c' and per-target flags should cause a renaming of the object. > So color me embarrassed: the 'subdir-objects' Automake option appears > to do what I want, more or less(*). Inasmuch as it is particularly > relevant there, perhaps a mention of it could be added to section 7.3 > of the manual? Yes, that sounds like a good idea. > (*) "More or less" because with Automake 1.11 it yielded Makefiles containing > many lines of the form > include src/$(DEPDIR)/foo.Po > These files did not (yet) exist, so make completely rejected the file. > Automake stopped emitting these when I removed the 'subdir-objects' > option, and started again when I put it back. That's weird, because there should be (undocumented) src/$(DEPDIR)/$(am__dirstamp) targets in the Makefile which the .deps file depend upon and which cause the directories to be created in the build tree. Can you show a (preferably small) reproducible test case please? Thanks. > In the end I added the > 'no-dependencies' option as well; this suppressed the include lines, > but of course also disabled dependency tracking. This shouldn't be necessary. Cheers, Ralf
