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

3.1 General Operation

Automake works by reading a and generating a Certain variables and rules defined in the instruct Automake to generate more specialized code; for instance, a bin_PROGRAMS variable definition will cause rules for compiling and linking programs to be generated.

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

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

A special exception is that the GNU make append operator, ‘+=’, is supported. This operator appends its right hand argument to the variable specified on the left. Automake will translate the operator into an ordinary ‘=’ operator; ‘+=’ will thus work with any make program.

Further note that variable assignments should not be indented with TAB characters, use spaces if necessary. On the other hand, rule commands should be indented with a leading TAB character.

Automake tries to keep comments grouped with any adjoining rules or variable definitions.

A rule defined in generally overrides any such rule 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 variable defined in or AC_SUBSTed from will override any definition of the variable that automake would ordinarily create. This feature is more often useful than the ability to override a rule. Be warned that many of the variables generated by automake are considered to be for internal use only, and their names might change in future releases.

When examining a variable definition, Automake will recursively examine variables 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 that 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 read:

## Process this file with automake to produce

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