Translation(s): none
Theory
Autotools are GNU's tools for portably when building C and C++ applications. They support most, if not all, of the UNIX platforms as well as some others, like Windows.
- Autoconf is used to attempt to work around the quirks found in various Unix-like operating systems. For example, some Unix-like systems may have certain facilities that are known to be broken or missing entirely. Autoconf creates a shell script which can detect these, and the program can work around them. The final output of the Autoconf utility is the configure script. Some extra programs are usually also needed for this, such as aclocal and autoheader
- Automake helps to create portable Makefiles, 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 Autoconf to generate the Makefile.
- Libtool helps manage the creation of static and dynamic libraries on various Unix-like operating systems. Libtool accomplishes this by abstracting the library creation process, hiding differences between various systems (e.g., GNU/Linux systems vs. Solaris).
When you download a program with an autotools building system, the developers often have the configure script already generated for you. Creating the configure script from the autotools source can be quite tricky, because it's very dependent of the versions of the autotools that you're using. The developers may also provide the script that they use to generate the configure script if they use one, which can be useful if you need to do it yourself.
Building a program developed with autotools is very easy and straightforward, as long as the developers have made a proper build system. The first step is to probe the system and configure the software to build properly with the ./configure script. ./configure accepts some parameters which allow you to define the compile-time configuration of the program, and usually gives you some proper help on them with ./configure --help.
Links
Packaging advice
Using autoconf, particularly good packaging practice to allow for updates: https://wiki.debian.org/AutoTools/autoconf