Next: Changed Directory Variables, Previous: Preset Output Variables, Up: Makefile Substitutions
The following variables specify the directories for package installation, see Variables for Installation Directories, for more information. Each variable corresponds to an argument of configure; trailing slashes are stripped so that expressions such as `${prefix}/lib' expand with only one slash between directory names. See the end of this section for details on when and how to use these variables.
The directory for installing idiosyncratic read-only architecture-independent data.
The root of the directory tree for read-only architecture-independent data files.
The installation prefix for architecture-dependent files. By default it's the same as prefix. You should avoid installing anything directly to exec_prefix. However, the default value for directories containing architecture-dependent files should be relative to exec_prefix.
The directory for installing locale-dependent but architecture-independent data, such as message catalogs. This directory usually has a subdirectory per locale.
The common installation prefix for all files. If exec_prefix is defined to a different value, prefix is used only for architecture-independent files.
Most of these variables have values that rely on prefix
or
exec_prefix
. It is deliberate that the directory output
variables keep them unexpanded: typically `@datarootdir@' is
replaced by `${prefix}/share', not `/usr/local/share', and
`@datadir@' is replaced by `${datarootdir}'.
This behavior is mandated by the GNU coding standards, so that when the user runs:
In order to support these features, it is essential that
datarootdir
remains being defined as `${prefix}/share' to
depend upon the current value of prefix
.
A corollary is that you should not use these variables except in
makefiles. For instance, instead of trying to evaluate datadir
in configure and hard-coding it in makefiles using
e.g., `AC_DEFINE_UNQUOTED([DATADIR], ["$datadir"], [Data directory.])',
you should add
-DDATADIR='$(datadir)' to your makefile's definition of
CPPFLAGS
(AM_CPPFLAGS
if you are also using Automake).
Similarly, you should not rely on AC_CONFIG_FILES
to replace
datadir
and friends in your shell scripts and other files; instead,
let make manage their replacement. For instance Autoconf
ships templates of its shell scripts ending with `.in', and uses a
makefile snippet similar to the following to build scripts like
autoheader and autom4te:
edit = sed \ -e 's|@datadir[@]|$(pkgdatadir)|g' \ -e 's|@prefix[@]|$(prefix)|g' autoheader autom4te: Makefile rm -f $@ $@.tmp $(edit) '$(srcdir)/$@.in' >$@.tmp chmod +x $@.tmp chmod a-w $@.tmp mv $@.tmp $@ autoheader: $(srcdir)/autoheader.in autom4te: $(srcdir)/autom4te.in
Some details are noteworthy:
VPATH
should
not contain shell metacharacters or white
space. See Special Chars in Variables.
edit
uses values that depend on the configuration specific
values (prefix
, etc.) and not only on VERSION
and so forth,
the output depends on Makefile, not configure.ac.
autoconf autoheader: Makefile .in: rm -f $@ $@.tmp $(edit) $< >$@.tmp chmod +x $@.tmp mv $@.tmp $@
See Single Suffix Rules, for details.
For the more specific installation of Erlang libraries, the following variables are defined:
The common parent directory of Erlang library installation directories. This variable is set by calling the
AC_ERLANG_SUBST_INSTALL_LIB_DIR
macro in configure.ac.
The installation directory for Erlang library library. This variable is set by calling the `AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR(library, version' macro in configure.ac.
See Erlang Libraries, for details.