(automake-1.16.info)amhello's Makefile.am Setup Explained


Prev: amhello's configure.ac Setup Explained Up: Hello World
Enter node , (file) or (file)node

2.4.3 ‘amhello’’s ‘Makefile.am’ Setup Explained
-----------------------------------------------

We now turn to ‘src/Makefile.am’.  This file contains Automake
instructions to build and install ‘hello’.

     bin_PROGRAMS = hello
     hello_SOURCES = main.c

   A ‘Makefile.am’ has the same syntax as an ordinary ‘Makefile’.  When
‘automake’ processes a ‘Makefile.am’ it copies the entire file into the
output ‘Makefile.in’ (that will be later turned into ‘Makefile’ by
‘configure’) but will react to certain variable definitions by
generating some build rules and other variables.  Often ‘Makefile.am’s
contain only a list of variable definitions as above, but they can also
contain other variable and rule definitions that ‘automake’ will pass
along without interpretation.

   Variables that end with ‘_PROGRAMS’ are special variables that list
programs that the resulting ‘Makefile’ should build.  In Automake speak,
this ‘_PROGRAMS’ suffix is called a “primary”; Automake recognizes other
primaries such as ‘_SCRIPTS’, ‘_DATA’, ‘_LIBRARIES’, etc. corresponding
to different types of files.

   The ‘bin’ part of the ‘bin_PROGRAMS’ tells ‘automake’ that the
resulting programs should be installed in BINDIR.  Recall that the GNU
Build System uses a set of variables to denote destination directories
and allow users to customize these locations (Note: Standard Directory
Variables).  Any such directory variable can be put in front of a
primary (omitting the ‘dir’ suffix) to tell ‘automake’ where to install
the listed files.

   Programs need to be built from source files, so for each program
‘PROG’ listed in a ‘_PROGRAMS’ variable, ‘automake’ will look for
another variable named ‘PROG_SOURCES’ listing its source files.  There
may be more than one source file: they will all be compiled and linked
together.

   Automake also knows that source files need to be distributed when
creating a tarball (unlike built programs).  So a side-effect of this
‘hello_SOURCES’ declaration is that ‘main.c’ will be part of the tarball
created by ‘make dist’.

   Finally here are some explanations regarding the top-level
‘Makefile.am’.

     SUBDIRS = src
     dist_doc_DATA = README

   ‘SUBDIRS’ is a special variable listing all directories that ‘make’
should recurse into before processing the current directory.  So this
line is responsible for ‘make’ building ‘src/hello’ even though we run
it from the top-level.  This line also causes ‘make install’ to install
‘src/hello’ before installing ‘README’ (not that this order matters).

   The line ‘dist_doc_DATA = README’ causes ‘README’ to be distributed
and installed in DOCDIR.  Files listed with the ‘_DATA’ primary are not
automatically part of the tarball built with ‘make dist’, so we add the
‘dist_’ prefix so they get distributed.  However, for ‘README’ it would
not have been necessary: ‘automake’ automatically distributes any
‘README’ file it encounters (the list of other files automatically
distributed is presented by ‘automake --help’).  The only important
effect of this second line is therefore to install ‘README’ during ‘make
install’.

   One thing not covered in this example is accessing the installation
directory values (Note: Standard Directory Variables) from your
program code, that is, converting them into defined macros.  For this,
Note: (autoconf)Defining Directories.


automatically generated by info2www version 1.2.2.9