Next: , Previous: , Up: General ideas   [Contents][Index]


2.1 General Operation

Automake works by reading a Makefile.am and generating a Makefile.in. Certain macros and targets defined in the Makefile.am instruct Automake to generate more specialized code; for instance, a ‘bin_PROGRAMS’ macro definition will cause targets for compiling and linking programs to be generated.

The macro definitions and targets in the Makefile.am are copied verbatim into the generated file. This allows you to add arbitrary code into the generated Makefile.in. For instance the Automake distribution includes a non-standard cvs-dist target, which the Automake maintainer uses to make distributions from his source control system.

Note that GNU make extensions are not recognized by Automake. Using such extensions in a Makefile.am will lead to errors or confusing behavior.

Automake tries to group comments with adjoining targets and macro definitions in an intelligent way.

A target defined in Makefile.am generally overrides any such target of a similar name that would be automatically generated by automake. Although this is a supported feature, it is generally best to avoid making use of it, as sometimes the generated rules are very particular.

Similarly, a macro defined in Makefile.am or AC_SUBST’ed from configure.in will override any definition of the macro that automake would ordinarily create. This feature is more often useful than the ability to override a target definition. Be warned that many of the macros generated by automake are considered to be for internal use only, and their names might change in future releases.

When examining a macro definition, Automake will recursively examine macros referenced in the definition. For example, if Automake is looking at the content of foo_SOURCES in this snippet

xs = a.c b.c
foo_SOURCES = c.c $(xs)

it would use the files a.c, b.c, and c.c as the contents of foo_SOURCES.

Automake also allows a form of comment which is not copied into the output; all lines beginning with ‘##’ (leading spaces allowed) are completely ignored by Automake.

It is customary to make the first line of Makefile.am read:

## Process this file with automake to produce Makefile.in

Next: Strictness, Previous: General ideas, Up: General ideas   [Contents][Index]