Automake

I’ve seen in certain Open Source Projects. They don’t use CMake instead has Automake.

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 from files called Makefile.am. Each Makefile.am contains, among other things, useful variable definitions for the compiled software, such a Compiler and Linker flags, dependencies and their versions, etc.

Process

Very same idea as CMake, it allows developers to write a Makefile to compile projects without having to deal with archaic Makefile syntax. In other words, in a higher-level language. It suffices to give:

  • A line that declares the name of the program to build
  • A list of source files
  • A list of command-line options to be passed to the compiler
  • A list of command-line options to be passed to the linker (which libraries the program needs and in what directories they are to be found)

Automake also takes care of automatically generating the dependency information so that when a source file is modified, the next invocation of the make command will know which source files need to be recompiled.

If the compiler allows it, Automake tries to make the dependency system dynamic: whenever a source file is compiled, that file’s dependencies are updated by asking the compiler to regenerate the file’s dependency list. In other words, dependency tracking is a side effect of the compilation process.

This attempts to avoid the problem with some static dependency systems, where the dependencies are detected only once when the programmer starts working on the project.

Flow diagram of autoconf and automake