Automake at its simplest turns a file called `Makefile.am' into a GNU-compliant `Makefile.in' for use with `configure' . Each `Makefile.am' is written according to make syntax; Automake recognizes special macro and target names and generates code based on these. There are a few Automake rules which differ slightly from make rules: - Ordinary
make comments are passed through to the output, but comments beginning with `##' are Automake comments and are not passed through. - Automake supports
include directives. These directives are not passed through to the `Makefile.in' , but instead are processed by automake -- files included this way are treated as if they were textually included in `Makefile.am' at that point. This can be used to add boilerplate to each `Makefile.am' in a project via a centrally -maintained file. The filename to include can start with `$(top_srcdir)' to indicate that it should be found relative to the top-most directory of the project; if it is a relative path or if it starts with `$(srcdir)' then it is relative to the current directory. For example, here is how you would reference boilerplate code from the file `config/Make-rules' (where `config' is a top-level dirctory in the project): | include $(top_srcdir)/config/Make-rules | - Automake supports conditionals which are not passed directly through to `Makefile.in' . This feature is discussed in 19. Advanced GNU Automake Usage.
- Automake supports macro assignment using `+=' ; these assignments are translated by Automake into ordinary `=' assignments in `Makefile.in' .
All macros and targets, including those which Automake does not recognize, are passed through to the generated `Makefile.in' -- this is a powerful extension mechanism. Sometimes Automake will define macros or targets internally. If these are also defined in `Makefile.am' then the definition in `Makefile.am' takes precedence. This feature provides an easy way to tailor specific parts of the output in small ways. Note, however, that it is a mistake to override parts of the generated code that aren't documented (and thus `exported' by Automake). Overrides like this stand a good chance of not working with future Automake releases. Automake also scans `configure.in' . Sometimes it uses the information it discovers to generate extra code, and sometimes to provide extra error checking. Automake also turns every AC_SUBST into a `Makefile' variable. This is convenient in more ways than one: not only does it mean that you can refer to these macros in `Makefile.am' without extra work, but, since Automake scans `configure.in' before it reads any `Makefile.am' , it also means that special variables and overrides Automake recognizes can be defined once in `configure.in' . |