[Top][All Lists]

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

Re: Autoconfisticating a multi-directory, non-recursive, GNU-make specif

From: Ralf Wildenhues
Subject: Re: Autoconfisticating a multi-directory, non-recursive, GNU-make specific project
Date: Thu, 16 Feb 2006 13:50:16 +0100
User-agent: Mutt/1.5.11

Hi Duncan,

* Duncan Gibson wrote on Thu, Feb 16, 2006 at 10:29:34AM CET:
> I've always struggled with auto{conf,make} in the past, but decided
> that my next project really needs to have some chance of portability.

You can use Autoconf without Automake.

> I'm aware of the famous "Recursive Make Considered Harmful" paper.

> As far as I can see from extensive searching on Google, all of the
> examples of setting up non-recursive make systems appear to rely on
> using GNU make in isolation, without auto{conf,make}

No, nonrecursive setups are quite possible with Automake.  It really
helps to use a recent version (due to bugfixes), though, and you should
use the Automake option subdir-objects, to retain sanity.

> The first one that really caught my attention was:
> but does not provide source examples to test and verify how it works.
> The second one is an almost automatic system which requires only
> boilerplate sub-Makefiles and minimal editing at the top level,
> but include resolution and library linking are handled implicitly:

I'm sorry, I've never looked at those examples (and don't have the time
to do so ATM).  For a good example of a package that uses Automake and
non-recursive Makefiles look at GraphicsMagick.

> In makesample, here are two apps, app1 and app2, in two separate
> directories. app1 needs a header file from the lib1 directory, and
> app2 needs to link against a library on lib2.
> I'm wondering whether it is possible to autoconfisticate this *and*
> retain the non-recursive make side, but so far I can't even get a
> "standard" autoconfistication to work. So I have 3 questions that
> I hope someone will be kind enough to help me with:
> 1. How do I set up the lib2/lib2.a so that app2 can link with it?
> 2. How do I set up the include of lib1/lib1.h in app1 so that I
>    can configure and make in a directory outside the source tree?
> 3. How can I set up a non-recursive auto{conf,make} configuration?
>    [The automake "Alternate approach to subdirectories" is unclear,
>    but it seems to me that automake is designed around recursion]
> Below you will find the results of what I have come up with so
> far after working through the tutorials at:

I only know the last tutorial (and that is good).

Here are suggestions for corrected versions of your files.  Whether you
write a in every directory and include it from the main one,
or just put everything in the main directory right away is a matter of
taste.  After having all necessary files, `autoreconf -vi' should
suffice to get you in a working state.  Of course you can build outside
the source tree, just
  mkdir build
  cd build
and enjoy.

Hope that helps.


--- ---
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_INIT([makesample], [1.0], address@hidden)
AM_INIT_AUTOMAKE([1.9 subdir-objects])

# Checks for programs.

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.


--- ---
include lib1/
include lib2/
include app1/
include app2/

--- app1/ ---
bin_PROGRAMS += app1/app1
app1_app1_SOURCES = app1/app1.cpp

--- app2/ ---
bin_PROGRAMS += app2/app2
app2_app2_SOURCES = app2/main.cpp
app2_app2_LDADD = lib2/lib2.a

--- lib1/ ---
lib_LIBRARIES += lib1/lib1.a
lib1_lib1_a_SOURCES = lib1/lib1file.cpp

--- lib2/ ---
lib_LIBRARIES += lib2/lib2.a
lib2_lib2_a_SOURCES = lib2/file-in-lib2.cpp

reply via email to

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