Next: Depth, Previous: General ideas, Up: General ideas [Contents][Index]
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
Next: Depth, Previous: General ideas, Up: General ideas [Contents][Index]