The most common installation procedure looks as follows.
~ % tar zxf amhello-1.0.tar.gz ~ % cd amhello-1.0 ~/amhello-1.0 % ./configure … config.status: creating Makefile config.status: creating src/Makefile … ~/amhello-1.0 % make … ~/amhello-1.0 % make check … ~/amhello-1.0 % su Password: /home/adl/amhello-1.0 # make install … /home/adl/amhello-1.0 # exit ~/amhello-1.0 % make installcheck …
The user first unpacks the package. Here, and in the following
examples, we will use the non-portable
tar zxf command for
simplicity. On a system without GNU
tar installed, this
command should read
gunzip -c amhello-1.0.tar.gz | tar xf -.
The user then enters the newly created directory to run the configure script. This script probes the system for various features, and finally creates the Makefiles. In this toy example there are only two Makefiles, but in real-world projects, there may be many more, usually one Makefile per directory.
It is now possible to run
make. This will construct all the
programs, libraries, and scripts that need to be constructed for the
package. In our example, this compiles the hello program.
All files are constructed in place, in the source tree; we will see
later how this can be changed.
make check causes the package’s tests to be run. This step is
not mandatory, but it is often good to make sure the programs that
have been built behave as they should, before you decide to install
them. Our example does not contain any tests, so running
check is a no-op.
After everything has been built, and maybe tested, it is time to
install it on the system. That means copying the programs,
libraries, header files, scripts, and other data files from the
source directory to their final destination on the system. The
make install will do that. However, by default
everything will be installed in subdirectories of /usr/local:
binaries will go into /usr/local/bin, libraries will end up in
/usr/local/lib, etc. This destination is usually not writable
by any user, so we assume that we have to become root before we can
make install. In our example, running
will copy the program hello into /usr/local/bin
and README into /usr/local/share/doc/amhello.
A last and optional step is to run
make installcheck. This
command may run tests on the installed files.
make check tests
the files in the source tree, while
make installcheck tests
their installed copies. The tests run by the latter can be different
from those run by the former. For instance, there are tests that
cannot be run in the source tree. Conversely, some packages are set
up so that
make installcheck will run the very same tests as
make check, only on different files (non-installed
vs. installed). It can make a difference, for instance when the
source tree’s layout is different from that of the installation.
Furthermore it may help to diagnose an incomplete installation.
Presently most packages do not have any
because the existence of
installcheck is little known, and its
usefulness is neglected. Our little toy package is no better:
installcheck does nothing.