The GNU Autotools, also known as the GNU Build System, is a suite of
programming tool
A programming tool or software development tool is a computer program that software developers use to create, debug, maintain, or otherwise support other programs and applications. The term usually refers to relatively simple programs, that can b ...
s designed to assist in making
source code
In computing, source code, or simply code, is any collection of code, with or without comment (computer programming), comments, written using a human-readable programming language, usually as plain text. The source code of a Computer program, p ...
packages portable
Portable may refer to:
General
* Portable building, a manufactured structure that is built off site and moved in upon completion of site and utility work
* Portable classroom, a temporary building installed on the grounds of a school to provide a ...
to many
Unix-like
A Unix-like (sometimes referred to as UN*X or *nix) operating system is one that behaves in a manner similar to a Unix system, although not necessarily conforming to or being certified to any version of the Single UNIX Specification. A Unix-li ...
systems.
It can be difficult to make a software program portable: the
C compiler
This page is intended to list all current compilers, compiler generators, interpreters, translators, tool foundations, assemblers, automatable command line interfaces ( shells), etc.
Ada Compilers
ALGOL 60 compilers
ALGOL 68 compilers
cf. ...
differs from system to system; certain library functions are missing on some systems; header files may have different names. One way to handle this is to write conditional code, with code blocks selected by means of preprocessor directives (
#ifdef
); but because of the wide variety of build environments this approach quickly becomes unmanageable. Autotools is designed to address this problem more manageably.
Autotools is part of the
GNU toolchain
The GNU toolchain is a broad collection of programming tools produced by the GNU Project. These tools form a toolchain (a suite of tools used in a serial manner) used for developing software applications and operating systems.
The GNU toolchain ...
and is widely used in many
free software
Free software or libre software is computer software distributed under terms that allow users to run the software for any purpose as well as to study, change, and distribute it and any adapted versions. Free software is a matter of liberty, ...
and
open source
Open source is source code that is made freely available for possible modification and redistribution. Products include permission to use the source code, design documents, or content of the product. The open-source model is a decentralized sof ...
packages. Its component tools are
free software
Free software or libre software is computer software distributed under terms that allow users to run the software for any purpose as well as to study, change, and distribute it and any adapted versions. Free software is a matter of liberty, ...
, licensed under the
GNU General Public License
The GNU General Public License (GNU GPL or simply GPL) is a series of widely used free software licenses that guarantee end user
In product development, an end user (sometimes end-user) is a person who ultimately uses or is intended to ulti ...
with special license exceptions
permitting its use with
proprietary software
Proprietary software is computer software, software that is deemed within the free and open-source software to be non-free because its creator, publisher, or other rightsholder or rightsholder partner exercises a legal monopoly afforded by modern ...
.
The GNU Build System makes it possible to build many programs using a two-step process: ''configure'' followed by ''make''.
Components
Autotools consists of the
GNU
GNU () is an extensive collection of free software
Free software or libre software is computer software distributed under terms that allow users to run the software for any purpose as well as to study, change, and distribute it and any ...
utility programs
Autoconf
GNU Autoconf is a tool for producing configure scripts for building, installing, and packaging software on computer systems where a Bourne shell is available.
Autoconf is agnostic about the programming languages used, but it is often used for ...
,
Automake
In software development, GNU Automake is a programming tool to automate parts of the compilation process. It eases usual compilation problems. For example, it points to needed dependencies.
It automatically generates one or more ''Makefile.in' ...
, and
Libtool. Other related tools frequently used alongside it include GNU's
make program, GNU
gettext,
pkg-config, and the
GNU Compiler Collection
The GNU Compiler Collection (GCC) is an optimizing compiler produced by the GNU Project supporting various programming languages, hardware architectures and operating systems. The Free Software Foundation (FSF) distributes GCC as free sof ...
, also called GCC.
GNU Autoconf
Autoconf
GNU Autoconf is a tool for producing configure scripts for building, installing, and packaging software on computer systems where a Bourne shell is available.
Autoconf is agnostic about the programming languages used, but it is often used for ...
generates a
configure
script based on the contents of a
configure.ac
file, which characterizes a particular body of source code. The
configure
script, when run, scans the build environment and generates a subordinate
config.status
script which, in turn, converts other input files and most commonly
Makefile.in
into output files (
Makefile
), which are appropriate for that build environment. Finally, the
make
program uses
Makefile
to generate executable programs from source code.
The complexity of Autotools reflects the variety of circumstances under which a body of source code may be built.
* If a source code file is changed then it suffices to re-run
make
, which only re-compiles that part of the body of the source code affected by the change.
* If a
.in
file has changed then it suffices to re-run
config.status
and
make
.
* If the body of source code is copied to another computer then it is sufficient to re-run
configure
(which runs
config.status
) and
make
. (For this reason source code using Autotools is normally distributed without the files that
configure
generates.)
* If the body of source code is changed more fundamentally, then
configure.ac
and the
.in
files need to be changed and all subsequent steps also followed.
To process files, autoconf uses the GNU implementation of the
m4 macro system.
Autoconf comes with several auxiliary programs such as
autoheader
, which is used to help manage
C header file
Many programming languages and other computer files have a directive, often called include (sometimes copy or import), that causes the contents of the specified file to be inserted into the original file. These included files are called copybooks ...
s;
autoscan
, which can create an initial input file for Autoconf; and
ifnames
, which can list C pre-processor identifiers used in the program.
GNU Automake
Automake
In software development, GNU Automake is a programming tool to automate parts of the compilation process. It eases usual compilation problems. For example, it points to needed dependencies.
It automatically generates one or more ''Makefile.in' ...
helps to create portable
Makefile
s, which are in turn processed with the
make utility. It takes its input as
Makefile.am
, and turns it into
Makefile.in
, which is used by the configure script to generate the file
Makefile
output. It also performs automatic dependency tracking; every time a source file is compiled, the list of dependencies (e.g., C header files) is recorded. Later, any time make is run and a dependency appears to have changed, the dependent files will be rebuilt.
GNU Libtool
Libtool helps manage the creation of
static and
dynamic libraries
A library is a collection of materials, books or media that are accessible for use and not just for display purposes. A library provides physical (hard copies) or digital access (soft copies) materials, and may be a physical location or a vir ...
on various
Unix-like
A Unix-like (sometimes referred to as UN*X or *nix) operating system is one that behaves in a manner similar to a Unix system, although not necessarily conforming to or being certified to any version of the Single UNIX Specification. A Unix-li ...
operating systems. Libtool accomplishes this by
abstracting
An abstract is a brief summary of a research article, thesis, review, conference proceeding, or any in-depth analysis of a particular subject and is often used to help the reader quickly ascertain the paper's purpose. When used, an abstract always ...
the library-creation process, hiding differences between various systems (e.g.
Linux
Linux ( or ) is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged as a Linux distribution, which i ...
systems vs.
Solaris).
Usage
Autotools assists
software developers to write
cross-platform
In computing, cross-platform software (also called multi-platform software, platform-agnostic software, or platform-independent software) is computer software that is designed to work in several computing platforms. Some cross-platform software ...
software and make it available to a much wider user community, including in its source code form to those users who wish to build the software themselves. In most cases users simply run the supplied
configure
script (which has no dependencies other than the presence of a
Bourne-compatible shell), and then a
make
program. They do not need to have the Autotools themselves installed on the computer.
It can be used both for building native programs on the build machine and also for
cross-compiling
A cross compiler is a compiler capable of creating executable code for a platform other than the one on which the compiler is running. For example, a compiler that runs on a PC but generates code that runs on an Android smartphone is a cross co ...
to other architectures.
Cross-compiling software to run on a Windows host from a Linux or other Unix-like build system is also possible, using MinGW, however native compilation is often desirable on operating systems (such as the
Microsoft Windows family of systems) that cannot run Bourne shell scripts on their own. This makes building such software on the Windows operating system a bit harder than on a
Unix-like
A Unix-like (sometimes referred to as UN*X or *nix) operating system is one that behaves in a manner similar to a Unix system, although not necessarily conforming to or being certified to any version of the Single UNIX Specification. A Unix-li ...
system which provides the Bourne shell as a standard component. One can install the
Cygwin
Cygwin ( ) is a POSIX-compatible programming and runtime environment that runs natively on Microsoft Windows. Under Cygwin, source code designed for Unix-like operating systems may be compiled with minimal modification and executed.
The Cygwin i ...
or
MSYS system on top of Windows to provide a
Unix-like
A Unix-like (sometimes referred to as UN*X or *nix) operating system is one that behaves in a manner similar to a Unix system, although not necessarily conforming to or being certified to any version of the Single UNIX Specification. A Unix-li ...
compatibility layer, though, allowing
configure scripts to run. Cygwin also provides the
GNU Compiler Collection
The GNU Compiler Collection (GCC) is an optimizing compiler produced by the GNU Project supporting various programming languages, hardware architectures and operating systems. The Free Software Foundation (FSF) distributes GCC as free sof ...
,
GNU make, and other software that provides a nearly complete Unix-like system within Windows; MSYS also provides GNU make and other tools designed to work with the
MinGW version of GCC.
Although the developer is expected to provide a
configure script for the end-user, occasionally the user may wish to re-generate the configure script itself. Such working might be necessary if the user wishes to amend the source code itself. Such users would need to have Autotools installed, and to use components such as its ''autoreconf''.
The autoconf-generated
configure
can be slow because it executes programs such as a C compiler many times in order to test whether various libraries, header files, and language features are present. This particularly affects
Cygwin
Cygwin ( ) is a POSIX-compatible programming and runtime environment that runs natively on Microsoft Windows. Under Cygwin, source code designed for Unix-like operating systems may be compiled with minimal modification and executed.
The Cygwin i ...
, which, due to its lack of a native
fork system call, may execute configure scripts considerably slower than
Linux
Linux ( or ) is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged as a Linux distribution, which i ...
.
Criticism
In his column for ''
ACM Queue
''ACM Queue'' is a bimonthly computer magazine founded and published by the Association for Computing Machinery (ACM). The magazine was established in 2003. Steve Bourne
Stephen Richard "Steve" Bourne (born 7 January 1944) is an English compu ...
'',
FreeBSD
FreeBSD is a free and open-source Unix-like operating system descended from the Berkeley Software Distribution (BSD), which was based on Research Unix. The first version of FreeBSD was released in 1993. In 2005, FreeBSD was the most popular ...
developer
Poul-Henning Kamp
Poul-Henning Kamp (; born 1966) is a Danish computer software developer known for work on various projects including FreeBSD and Varnish. He currently resides in Slagelse, Denmark.
Involvement in the FreeBSD project
Poul-Henning Kamp has been ...
criticized the GNU Build System:
Kamp sketches the history of the build system in the portability problems inherent in the
multitude of 1980s Unix variants, and bemoans the need for such build systems to exist:
Responses to Criticism
Although critics of the Autotools frequently advocate for alternatives that provide greater simplicity to their users, some have argued that this is not necessarily a good thing. John Calcote, author of the ''Autotools, 2nd Edition: A Practitioner's Guide to GNU Autoconf, Automake, and Libtool'', opined:
See also
*
*
Build automation
*
CMake
*
Gnits Standards
*
GNU Coding Standards
*
Waf
*
SCons
*
Meson build system
*
Qmake
References
External links
The GNU configure and build system*Th
pkg-configpackage
GNU automake documentationGNU autoconf documentationCombined manual for Automake and AutoconfGNU Autoconf, Automake, and LibtoolAutotools: a practitioner's guide to Autoconf, Automake and LibtoolA Guide to Integrating CUDA with AutotoolsAutotools MythbusterIntroduction to the Autotools
{{DEFAULTSORT:Gnu Build System
Build automation
Compiling tools
Build system
Software using the GPL license
Unix programming tools