Next: Creating a distribution, Previous: Adding a configure flag, Up: Tutorial [Contents][Index]
Some programs need to access data files when they are run. For example, suppose we print a message from a file, message.
hello.c
:
#include <config.h> #include <stdio.h> #include <stdlib.h> #define MESSAGE_FILE "message" int main (void) { FILE *in; char *line = 0; size_t n = 0; ssize_t result; in = fopen (MESSAGE_FILE, "r"); if (!in) exit (1); result = getline (&line, &n, in); if (result == -1) exit (1); printf ("%s", line); }
Instead of hard-coding the location of the data file, we could define ‘MESSAGE_FILE’ in Makefile.am:
AM_CPPFLAGS = -DMESSAGE_FILE=\"$(pkgdatadir)/message\"
AM_CPPFLAGS
specifies C preprocessor flags for make
to
use when
building the program. pkgdatadir
is a Make variable that is
automatically set from the pkgdatadir
Autoconf output variable,
which in turn is among the several output variables that Autoconf
configure scripts always set specifying installation directories. By
default, this variable will have the value
‘/usr/local/share/hello’, so the program will look for the data file at
‘/usr/local/share/hello/message’. The user of the program can
change this value by giving the --datadir option to
configure
.
The ‘AM_’ prefix on AM_CPPFLAGS
is there to distinguish it
from the CPPFLAGS
Makefile variable, which may be set by the
configure script and/or overridden from the command-line.
We also need the following line in Makefile.am to distribute and install the data file:
dist_pkgdata_DATA = message
The ‘DATA’ part of the variable name corresponds to the kind of
object being listed in the variable’s value, in this case data files.
The value here is a single file called ‘message’. The
‘pkgdata_’ prefix indicates that the file should be installed in
pkgdatadir
by ‘make install’, and the ‘dist_’ prefix
indicates that the file should be included in the distribution archive
created by ‘make dist’.
Next: Creating a distribution, Previous: Adding a configure flag, Up: Tutorial [Contents][Index]