Node:Directory Variables, Next:Standard Targets, Previous:Command Variables, Up:Makefile Conventions
Installation directories should always be named by variables, so it is easy to install in a nonstandard place. The standard names for these variables are described below. They are based on a standard filesystem layout; variants of it are used in SVR4, 4.4BSD, GNU/Linux, Ultrix v4, and other modern operating systems.
These two variables set the root for the installation. All the other installation directories should be subdirectories of one of these two, and nothing should be directly installed into these two directories.
prefix
prefix
should be /usr/local
.
When building the complete GNU system, the prefix will be empty and
/usr
will be a symbolic link to /
.
(If you are using Autoconf, write it as @prefix@
.)
Running make install
with a different value of prefix
from
the one used to build the program should not recompile the
program.
exec_prefix
exec_prefix
should
be $(prefix)
.
(If you are using Autoconf, write it as @exec_prefix@
.)
Generally, $(exec_prefix)
is used for directories that contain
machine-specific files (such as executables and subroutine libraries),
while $(prefix)
is used directly for other directories.
Running make install
with a different value of exec_prefix
from the one used to build the program should not recompile the
program.
Executable programs are installed in one of the following directories.
bindir
/usr/local/bin
, but write it as
$(exec_prefix)/bin
.
(If you are using Autoconf, write it as @bindir@
.)
sbindir
/usr/local/sbin
, but write it as
$(exec_prefix)/sbin
.
(If you are using Autoconf, write it as @sbindir@
.)
libexecdir
/usr/local/libexec
, but write it as $(exec_prefix)/libexec
.
(If you are using Autoconf, write it as @libexecdir@
.)
Data files used by the program during its execution are divided into categories in two ways.
This makes for six different possibilities. However, we want to discourage the use of architecture-dependent files, aside from object files and libraries. It is much cleaner to make other data files architecture-independent, and it is generally not hard.
Therefore, here are the variables Makefiles should use to specify directories:
datadir
/usr/local/share
, but write it as
$(prefix)/share
.
(If you are using Autoconf, write it as @datadir@
.)
As a special exception, see $(infodir)
and $(includedir)
below.
sysconfdir
/etc/passwd
, and so forth belong
here. All the files in this directory should be ordinary ASCII text
files. This directory should normally be /usr/local/etc
, but
write it as $(prefix)/etc
.
(If you are using Autoconf, write it as @sysconfdir@
.)
Do not install executables here in this directory (they probably belong
in $(libexecdir)
or $(sbindir)
). Also do not install
files that are modified in the normal course of their use (programs
whose purpose is to change the configuration of the system excluded).
Those probably belong in $(localstatedir)
.
sharedstatedir
/usr/local/com
, but write it as $(prefix)/com
.
(If you are using Autoconf, write it as @sharedstatedir@
.)
localstatedir
$(datadir)
or $(sysconfdir)
. $(localstatedir)
should normally be /usr/local/var
, but write it as
$(prefix)/var
.
(If you are using Autoconf, write it as @localstatedir@
.)
libdir
$(libexecdir)
instead. The value of libdir
should normally be
/usr/local/lib
, but write it as $(exec_prefix)/lib
.
(If you are using Autoconf, write it as @libdir@
.)
infodir
/usr/local/info
, but it should be written
as $(prefix)/info
.
(If you are using Autoconf, write it as @infodir@
.)
lispdir
/usr/local/share/emacs/site-lisp
, but it
should be written as $(prefix)/share/emacs/site-lisp
.
If you are using Autoconf, write the default as @lispdir@
.
In order to make @lispdir@
work, you need the following lines
in your configure.in
file:
lispdir='${datadir}/emacs/site-lisp' AC_SUBST(lispdir)
includedir
#include
preprocessor directive. This
should normally be /usr/local/include
, but write it as
$(prefix)/include
.
(If you are using Autoconf, write it as @includedir@
.)
Most compilers other than GCC do not look for header files in directory
/usr/local/include
. So installing the header files this way is
only useful with GCC. Sometimes this is not a problem because some
libraries are only really intended to work with GCC. But some libraries
are intended to work with other compilers. They should install their
header files in two places, one specified by includedir
and one
specified by oldincludedir
.
oldincludedir
#include
header files for use with
compilers other than GCC. This should normally be /usr/include
.
(If you are using Autoconf, you can write it as @oldincludedir@
.)
The Makefile commands should check whether the value of
oldincludedir
is empty. If it is, they should not try to use
it; they should cancel the second installation of the header files.
A package should not replace an existing header in this directory unless
the header came from the same package. Thus, if your Foo package
provides a header file foo.h
, then it should install the header
file in the oldincludedir
directory if either (1) there is no
foo.h
there or (2) the foo.h
that exists came from the Foo
package.
To tell whether foo.h
came from the Foo package, put a magic
string in the file--part of a comment--and grep
for that string.
Unix-style man pages are installed in one of the following:
mandir
/usr/local/man
, but you should
write it as $(prefix)/man
.
(If you are using Autoconf, write it as @mandir@
.)
man1dir
$(mandir)/man1
.
man2dir
$(mandir)/man2
...
manext
.1
.
man1ext
man2ext
...
manext
if the package needs to install man
pages in more than one section of the manual.
And finally, you should set the following variable:
srcdir
configure
shell script.
(If you are using Autconf, use srcdir = @srcdir@
.)
For example:
# Common prefix for installation directories. # NOTE: This directory must exist when you start the install. prefix = /usr/local exec_prefix = $(prefix) # Where to put the executable for the command `gcc'. bindir = $(exec_prefix)/bin # Where to put the directories used by the compiler. libexecdir = $(exec_prefix)/libexec # Where to put the Info files. infodir = $(prefix)/info
If your program installs a large number of files into one of the
standard user-specified directories, it might be useful to group them
into a subdirectory particular to that program. If you do this, you
should write the install
rule to create these subdirectories.
Do not expect the user to include the subdirectory name in the value of any of the variables listed above. The idea of having a uniform set of variable names for installation directories is to enable the user to specify the exact same values for several different GNU packages. In order for this to be useful, all the packages must be designed so that they will work sensibly when the user does so.