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 instances a `bin_PROGRAMS' macro definition will cause targets for compiling and linking to be generated.
The macro definitions and targets in the `Makefile.am' are copied
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 (or variable 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 variable defined in `Makefile.am' will override any
definition of the variable 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 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. E.g., 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 `##' 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
Go to the first, previous, next, last section, table of contents.