(automake-1.16.info)GNU Build System


Next: Use Cases Up: Autotools Introduction
Enter node , (file) or (file)node

2.1 Introducing the GNU Build System
====================================

It is a truth universally acknowledged, that as a developer in
possession of a new package, you must be in want of a build system.

   In the Unix world, such a build system is traditionally achieved
using the command ‘make’ (Note: Overview.).  You express the
recipe to build your package in a ‘Makefile’.  This file is a set of
rules to build the files in the package.  For instance the program
‘prog’ may be built by running the linker on the files ‘main.o’,
‘foo.o’, and ‘bar.o’; the file ‘main.o’ may be built by running the
compiler on ‘main.c’; etc.  Each time ‘make’ is run, it reads
‘Makefile’, checks the existence and modification time of the files
mentioned, decides what files need to be built (or rebuilt), and runs
the associated commands.

   When a package needs to be built on a different platform than the one
it was developed on, its ‘Makefile’ usually needs to be adjusted.  For
instance the compiler may have another name or require more options.  In
1991, David J. MacKenzie got tired of customizing ‘Makefile’ for the 20
platforms he had to deal with.  Instead, he handcrafted a little shell
script called ‘configure’ to automatically adjust the ‘Makefile’ (Note:
Genesis.).  Compiling his package was now as simple
as running ‘./configure && make’.

   Today this process has been standardized in the GNU project.  The GNU
Coding Standards (Note: The Release Process.
) explains how each package of the GNU project should have a
‘configure’ script, and the minimal interface it should have.  The
‘Makefile’ too should follow some established conventions.  The result?
A unified build system that makes all packages almost indistinguishable
by the installer.  In its simplest scenario, all the installer has to do
is to unpack the package, run ‘./configure && make && make install’, and
repeat with the next package to install.

   We call this build system the “GNU Build System”, since it was grown
out of the GNU project.  However it is used by a vast number of other
packages: following any existing convention has its advantages.

   The Autotools are tools that will create a GNU Build System for your
package.  Autoconf mostly focuses on ‘configure’ and Automake on
‘Makefile’s.  It is entirely possible to create a GNU Build System
without the help of these tools.  However it is rather burdensome and
error-prone.  We will discuss this again after some illustration of the
GNU Build System in action.


automatically generated by info2www version 1.2.2.9