manpagez: man pages & more
info automake
Home | html | info | man
[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

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 (see section 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 (see section Standard Directory Variables) from your program code, that is, converting them into defined macros. For this, see Defining Directories in The Autoconf Manual.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated on January 25, 2014 using texi2html 5.0.

© manpagez.com 2000-2024
Individual documents may contain additional copyright information.