Node:Installation Directory Variables,
Next:Build Directories,
Previous:Preset Output Variables,
Up:Makefile Substitutions
Installation Directory Variables
The following variables specify the directories where the package will
be installed, see Variables for Installation Directories, for more information.
See the end of this section for details on when and how to use these
variables.
The directory for installing executables that users run.
|
The directory for installing read-only architecture-independent data.
|
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 C header files.
|
The directory for installing documentation in Info format.
|
The directory for installing object code libraries.
|
The directory for installing executables that other programs run.
|
The directory for installing modifiable single-machine data.
|
The top-level directory for installing documentation in man format.
|
The directory for installing C header files for non-gcc compilers.
|
The common installation prefix for all files. If exec_prefix
is defined to a different value, prefix is used only for
architecture-independent files.
|
The directory for installing executables that system
administrators run.
|
The directory for installing modifiable architecture-independent data.
|
The directory for installing read-only single-machine data.
|
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 @datadir@
will be
replaced by ${prefix}/share
, not /usr/local/share
.
This behavior is mandated by the GNU coding standards, so that when
the user runs:
make
- she can still specify a different prefix from the one specified to
configure
, in which case, if needed, the package shall hard
code dependencies corresponding to the make-specified prefix.
make install
- she can specify a different installation location, in which case the
package must still depend on the location which was compiled in
(i.e., never recompile when
make install
is run). This is an
extremely important feature, as many people may decide to install all
the files of a package grouped together, and then install links from
the final locations to there.
In order to support these features, it is essential that datadir
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 hardcoding it in Makefiles using
e.g. AC_DEFINE_UNQUOTED(DATADIR, "$datadir")
, you should add
-DDATADIR="$(datadir)"
to your CPPFLAGS
.
Similarly you should not rely on AC_OUTPUT_FILES
to replace
datadir
and friends in your shell scripts and other files, rather
let make
manage their replacement. For instance Autoconf
ships templates of its shell scripts ending with .sh
, and uses
this Makefile snippet:
.sh:
rm -f $@ $@.tmp
sed 's,@datadir\@,$(pkgdatadir),g' $< >$@.tmp
chmod +x $@.tmp
mv $@.tmp $@
Three things are noteworthy:
@datadir\@
- The backslash prevents
configure
from replacing
@datadir@
in the sed expression itself.
$(pkgdatadir)
- Don't use
@pkgdatadir@
! Use the matching makefile variable
instead.
,
- Don't use
/
in the sed expression(s) since most probably the
variables you use, such as $(pkgdatadir)
, will contain
some.