automake
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Calling other external Makefiles and outside Make systems


From: John Ling
Subject: Re: Calling other external Makefiles and outside Make systems
Date: Wed, 04 Feb 2004 14:06:28 -0800
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031013 Thunderbird/0.3

Alexandre Duret-Lutz wrote:

John> Thank you Alexandre for providing that documentation.   I found the
John> last section on "proxy" makefiles helpful in incorporating the other
John> projects makefile.  I did get it working with this method.  For
John> example, I did:

John> lib_LIBRARIES += libloader.a

John> libloader.a :
John>         cd cpp/db/loader; \
John>         $(MAKE) -f ./Makefile.loader; \
John>         mv libloader.a $(srcdir)/lib

$(srcdir) can be an absolute path, or a path relative to the
current directory (depending on how `configure' was run). In the latter case you cannot use it after a `cd'. Also
I do not understand the purpose of `/lib'.  The rule is about
creating libloader.a in the current directory, not in lib/.

Maybe you want

lib_LIBRARIES += libloader.a
libloader.a:
        cd cpp/db/loader && $(MAKE) -f ./Makefile.loader
        mv cpp/db/loader/libloader.a .

or

lib_LIBRARIES += lib/libloader.a
lib/libloader.a:
        cd cpp/db/loader && $(MAKE) -f ./Makefile.loader
        mv cpp/db/loader/libloader.a lib

(likewise for other targets)

[...]
Well, when I run $(MAKE) -f ./Makefile.loader it does create the libloader.a in the cpp/db/loader directory. But, I want to collect all my libraries into one directory just underneath $(top_srcdir)/lib. Sorry I wrote $(srcdir) in my example but I meant $(top_srcdir).

John> With respect to my first idea, I've gotten some feedback from the
John> makers of this other build system.  So I give here a more detailed
John> background of my situation.

John> The idea is that the user will be responsible for installing and
John> building this other package.  So this other package and its built
John> libraries will reside outside of my source tree, completely
John> independent.  In order to build an application that uses this library,
John> requires that I include a Makefile.mk (specifies many variables like
John> top_srcdir, builddir, CXXFLAGS, CFLAGS, etc...) and a Makefile.lib
John> (specifies many targets).

John> What I was hoping to do was to include these two Makefile.lib and
John> Makefile.mk into my project's Makefile.am.  My fear was that the
John> CXXFLAGS and top_srcdir etc in my project will get overriden with what
John> is set here by Makefile.lib and Makefile.mk.

They will. Also in Automake Makefiles, CFLAGS, CPPFLAGS, CXXFLAGS and siblings are *user* variables (user are allowed to type things like
`./configure CFLAGS=-ggdb' to customize the build) and it's considered
bad taste to override these in Makefile.am (or any included fragment).
We use AM_CFLAGS, AM_CPPFLAGS, AM_CXXFLAGS... instead.

[...]

John> So, given this information, can I include the Makefile.lib and
John> Makefile.mk at a point just prior to the step where automake generates
John> the variables for CPPFLAGS, etc ... so that I can guarantee that the
John> CPPFLAGS etc will first be defined by the other build system's
John> templates and the be overridden by what automake generates.  If I can
John> guarantee this, I can then do:

John> CPPFLAGS += $(ORIG_CPPFLAGS)

John> Do you know if this is feasible?  If so, at where do I do the include
John> of these two template Makefiles?  At the beginning of Makefile.am?

This these fragment set the initial value of CPPFLAGS, you must
include then anywhere before the above `+='.

Ok thats what I thought.

John> Finally, in regards to your document, I think the transition from
John> listing the Makefile recursive targets to the paragraph talking about
John> Gettext was a little confusing.  I'm still not sure if you are using
John> Gettext as just an arbitrary example or if I am supposed to be using
John> Gettext specifically to somehow handle this issue.

It's just an example.  I've changed that paragraph to

  If you have ever used Gettext in a project, this is a good example of
how third-party `Makefile's can be used with Automake.  The `Makefile's
`gettextize' puts in the `po/' and `intl/' directories are handwritten
`Makefile's that implement all these targets.  That way they can be
added to `SUBDIRS' in Automake packages.
I look forward to reading the final version. It will be a very useful document.

John





reply via email to

[Prev in Thread] Current Thread [Next in Thread]