On Fri, 2006-09-22 at 04:34 +0200, Ralf Wildenhues wrote: > * Ryan McDougall wrote on Fri, Sep 22, 2006 at 02:54:21AM CEST: > > On Thu, 2006-09-21 at 13:32 +0200, Ralf Wildenhues wrote: > > > * Ryan McDougall wrote on Thu, Sep 21, 2006 at 11:40:37AM CEST:
> > > 2) If you prefer nonrecursive makefiles (you may include makefile > > > snippets from one into another), then you can just > > > > > > AUTOMAKE_OPTIONS = subdir-objects > > > module_LTLIBRARIES = libA.la libB.la libC.la > > > libA_la_SOURCES = foo/foo1.c bar/bar2.c A/a1.c ... > > > libB_la_SOURCES = baz/baz1/c bar/bar2.c B/b1.c .. > > > > I thought of this, but in this case libA_la_SOURCES could be on the > > order of 100-50 files long, which Id like to avoid if possible. > > You don't have to set this in one, and you can use variables (and > Automake conditionals) to factor. For example: > > -- Makefile.am -- > AUTOMAKE_OPTIONS = subdir-objects > module_LTLIBRARIES = libA.la libB.la libC.la > libA_la_SOURCES = > libB_la_SOURCES = > common_sources = > include foo/snippet.am > include bar/snippet.am > if CONDITION_BAZ > libB_la_SOURCES += baz/baz1.c > endif > libA_la_SOURCES += $(common_sources) > libB_la_SOURCES += $(common_sources) > > -- foo/snippet.am -- > ## Note the file name including the subdir here: we are being included > ## from a level up (Automake includes just do literal replacement): > libA_la_SOURCES += foo/foo1.c > > -- bar/snippet.am > common_sources += \ > bar/bar2.c \ > ... > Thanks for all your help Ralf, I _really_ appreciate you taking your time to help me out. I am currently attempting to use a version of this (non-recursive) method. I am avoiding exactly what you wrote since I need to pass specific -D options to different packages without using libA_CPPFLAGS = -DFORLIBFOO -DFORLIBBAR -DETC. What I have now is I have replaced the file names in the recursive Makefile.am's to be relative to the root directory like so: libfoo_SOURCES=src/foo.cpp -> libfoo_SOURCES=libfoo/src/foo.cpp and included libfoo/Makefile.am in the root Makefile.am. This works well, and would nearly be finished, except in my root Makefile.am I get this: noinst_LTLIBRARIES = libfoo.la ... lib_LTLIBRARIES = libA.la which Automake dutifully turns into a rule which always builds libA.la before libfoo.la, despite the fact that libA depends on libfoo (as expressed by the variable libA_la_LIBADD = -lfoo). How can I either 1. Express to automake the correct dependancy 2. Trick automake into building lib_LTLIBRARIES last (after noinst_LTLIBRARIES) ps. This would have been a lot easier if Automake would have automatically provided targets for each one of the SUBDIRS. That way I could have simply wrote one rule, libA: foo bar baz (where foo bar baz are SUBDIRs that need to be build before the SUBDIR libA). Should I open a bug/feature request? Thanks a tonne for your unheralded work!!! Id hate to have to give up on autotools. Cheers,