When building the complete GNU system, the prefix will be empty and /usr will be a symbolic link to /.
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.
Executable programs are installed
in one of the following directories.
sbindir
libexecdir
Data files used by the program
during its execution are divided into categories in two ways.
sysconfdir
sharedstatedir
localstatedir
libdir
infodir
includedir
Most compilers other than GCC do not look for header files in /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
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 filepart of a commentand grep for that string.
mandir
man1dir
man2dir
...
manext
man1ext
man2ext
...
And finally, you should set the following variable:
srcdir
Use the following for example.
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 previously discussed. 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.