| |
19.5 How Do I #define Installation Directories?
My program needs library files, installed in datadir and
similar. If I use
AC_DEFINE_UNQUOTED([DATADIR], [$datadir],
[Define to the read-only architecture-independent
data directory.])
I get
#define DATADIR "${prefix}/share"
As already explained, this behavior is on purpose, mandated by the
GNU Coding Standards, see Installation Directory Variables. There are several means to achieve a similar goal:
- Do not use
AC_DEFINE but use your makefile to pass the
actual value of datadir via compilation flags.
See Installation Directory Variables, for the details.
- This solution can be simplified when compiling a program: you may either
extend the
CPPFLAGS:
CPPFLAGS = -DDATADIR='"$(datadir)"' @CPPFLAGS@
or create a dedicated header file:
DISTCLEANFILES = datadir.h
datadir.h: Makefile
echo '#define DATADIR "$(datadir)"' >$@
- Use
AC_DEFINE but have configure compute the literal
value of datadir and others. Many people have wrapped macros to
automate this task. For instance, the macro AC_DEFINE_DIR from
the Autoconf Macro Archive.
This solution does not conform to the GNU Coding Standards.
- Note that all the previous solutions hard wire the absolute name of
these directories in the executables, which is not a good property. You
may try to compute the names relative to
prefix, and try to
find prefix at runtime, this way your package is relocatable.
Some macros are already available to address this issue: see
adl_COMPUTE_RELATIVE_PATHS and
adl_COMPUTE_STANDARD_RELATIVE_PATHS on the
Autoconf Macro Archive.
|
|