Sun Java Solaris Communities My SDN Account


Introduction to GNU Build Tools

By Neelakanth Nadgir, June 2001  


Software is generally developed to be used on multiple platforms. Since each of these platforms have different compilers, different include files, there is a need to write Makefiles and build scripts so that they can work on a variety of platforms. The free software community (Project GNU), faced with this problem, devised a set of tools to generate Makefiles and build scripts that work on a variety of platforms. If you have downloaded and built any GNU software from source, you are familiar with the configure script. The configure script runs a series of tests to determine information about your machine. The following is a sample output from configure.
foo@pastwatch: ...neel/projects/gpstat> ./configure
loading cache ./config.cache
checking whether to enable debugging... yes
checking host system type... sparc-sun-solaris2.8
checking target system type... sparc-sun-solaris2.8
checking build system type... sparc-sun-solaris2.8
Setting up build environment for sparc solaris2.8
checking whether build environment is sane... yes
Project GNU provides two programs, automake and autoconf, that simplify the generation of portable Makefiles and configure scripts. automake is a program that generates makefile templates automatically from and automake are described in detail below. autoconf is a tool that creates the configure file from autoconf also provides a set of utility scripts that include autoconf, aclocal, and autoscan that help to generate the configure script.

GNU Build Tools -- Step by Step

The process flow when using GNU build tools is as follows.
  1. Write templates.
  2. Write

    • 2.1 Use autoscan to generate a template.
    • 2.2 Specialize the generated configure.scan to suit your project.
    • 2.3 Rename configure.scan to

  3. Run automake to generate from (automake scans to find out more about the project).
  4. Run aclocal to make local copies of all autoconf macros. These macros are then included in the project.
  5. Run autoconf to generate configure.


automake, when used in conjunction with autoconf, makes creating Makefiles easy. automake operates on a to generate . is then processed by the configure script to generate Makefile. has macros that are processed by automake. A sample is shown below. Variables surrounded by @'s are automatically propagated without change to The configure script, when parsing into Makefile, makes the necessary substitutions (for example, @LDFLAGS@ may get expanded to "-lm -lthread).

bin_PROGRAMS = gpstat
gpstat_SOURCES = about.c interface.c multi-plot.c attach_process.c
gpstat_LDFLAGS = @LDFLAGS@ @GTK_LIBS@ -lgthread
automake knows the rules to create object files and executables for the platform it is running on. The above sets of macros tell automake that:
  1. The final executable is to be named gpstat.
  2. The sources for gpstat are the value of gpstat_SOURCES.
  3. Add @LDFLAGS@, @GTK_LIBS@, and -lgthread to the link line. (The  configure script will replace LD_FLAGS and GTK_LIBS with their proper values.)
  4. Include the variable $INCLUDES in the compilation line.


The configure script is generated from using autoconf. is a normal text file that contains several autoconf macros. These macros specify what tests to carry out.  General uses of the configure script include:

  • Find machine information (Hostname, version...).
  • Find the path to a particular program (bison, lex, ...).
  • Find out if a tool supports a feature (for example, if the compiler supports bool).
  • Check if the required libraries are available on your system.
  • Process to generate Makefile.
Comments can either begin with dnl or a #. The following is a small, well-documented, self-explanatory file.
dnl Process this file with autoconf to produce a configure script.
dnl notice how comments are preceded by "dnl"
# comments can also begin with a #
dnl This macro is a must, and this tests if the configure
dnl script is running in the correct directory
dnl This macro tells the configure script to put
dnl "defines" in a file rather than the command line.
dnl get the flags
dnl this macro is used to get the arguments supplied
dnl to the configure script (./configure --enable-debug)
dnl Check if we have enable debug support.
AC_MSG_CHECKING(whether to enable debugging)
AC_ARG_ENABLE(debug, [  --enable-debug=[no/yes] turn on debugging
                       [default=$debug_default]],, enable_debug=$debug_default)
dnl Yes, shell scripts can be used
if test "x$enable_debug" = "xyes"; then
         CFLAGS="$CFLAGS -g -DDEBUG"
CFLAGS="$CFLAGS -O3 -ffast-math -mcpu=v8 -mtune=ultrasparc"
dnl tells us that we require autoconf with version greater than
dnl 2.12 to generate configure
dnl get system information
dnl Since foo is currently untested on any os other
dnl than solaris, so check the os and quit if not solaris.
UNSUPPORTED_OS="FOO is currently unsupported on your platform.
If you are interested in making it work on your platform, you are 
more than *welcome*. Contact for details."
case "${target_os}" in
    echo ===========================================================
    echo Setting up build environment for ${target_cpu}${target_os}
    echo ===========================================================

# Build time sanity check...
dnl get path to install program
dnl initialize automake
dnl Checks for c compiler.
dnl check for standard c headers
dnl export these variable (so Makefile substitutions
dnl can be made. 
dnl Checks for libraries.
dnl AC_CHECK_LIB(gthread, g_thread_init)
dnl AC_CHECK_LIB(pthread, pthread_create)
dnl Check for /proc
       find /proc. See the file 'README' for help.))
dnl check for procfs.h
                  find procfs.h. See the file 'README' for help.))
dnl Checks for header files.
dnl Checks for typedefs, structures, and compiler characteristics.
dnl Create these files, making substitutions if necessary

automake also provides autoscan, a utility script that will help you create a template autoscan scans the program sources and adds suitable macros to It creates configure.scan, which then should be renamed, after making suitable modifications.
automake also provides a program called aclocal. aclocal makes local copies of all autoconf macros, so that other developers can modify the file.

You can combine the invocation of automake, aclocal, and autoconf as follows:

foo@pastwatch$ aclocal&& automake && autoconf


automake and autoconf are powerful tools that enable easier building of projects on various platforms. The only things you need to write are the and files. The use of these tools makes projects portable across several platforms. They are extremely configurable, and several predefined macros are already available for use. If you plan to make your projects available on a variety of platforms, you should consider using automake and autoconf.

Useful pointers

June 2001

Rate and Review
Tell us what you think of the content of this page.
Excellent   Good   Fair   Poor  
Your email address (no reply is possible without an address):
Sun Privacy Policy

Note: We are not able to respond to all submitted comments.

Oracle is reviewing the Sun product roadmap and will provide guidance to customers in accordance with Oracle's standard product communication policies. Any resulting features and timing of release of such features as determined by Oracle's review of roadmaps, are at the sole discretion of Oracle. All product roadmap information, whether communicated by Sun Microsystems or by Oracle, does not represent a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. It is intended for information purposes only, and may not be incorporated into any contract.