automake-1.16: General Operation

 
 3.1 General Operation
 =====================
 
 Automake works by reading a ‘Makefile.am’ and generating a
 ‘Makefile.in’.  Certain variables and rules defined in the ‘Makefile.am’
 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 ‘Makefile.am’ are copied
 mostly verbatim into the generated file, with all variable definitions
 preceding all rules.  This allows you to add almost arbitrary code into
 the generated ‘Makefile.in’.  For instance, the Automake distribution
 includes a non-standard rule for the ‘git-dist’ target, which the
 Automake maintainer uses to make distributions from the source control
 system.
 
    Note that most GNU Make extensions are not recognized by Automake.
 Using such extensions in a ‘Makefile.am’ 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.
 
    Automake tries to keep comments grouped with any adjoining rules or
 variable definitions.
 
    Generally, Automake is not particularly smart in the parsing of
 unusual Makefile constructs, so you’re advised to avoid fancy constructs
 or “creative” use of whitespace.  For example, <TAB> characters cannot
 be used between a target name and the following “‘:’” character, and
 variable assignments shouldn’t be indented with <TAB> characters.  Also,
 using more complex macros in target names can cause trouble:
 
      % cat Makefile.am
      $(FOO:=x): bar
      % automake
      Makefile.am:1: bad characters in variable name '$(FOO'
      Makefile.am:1: ':='-style assignments are not portable
 
    A rule defined in ‘Makefile.am’ 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 ‘Makefile.am’ or ‘AC_SUBST’ed from
 ‘configure.ac’ will override any definition of the variable that
 ‘automake’ would ordinarily create.  This feature is often more 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 ‘Makefile.am’ read:
 
      ## Process this file with automake to produce Makefile.in