In our last example (see Parallel Build Trees (a.k.a. VPATH Builds)), a source tree was shared by two hosts, but compilation and installation were done separately on each host.
The GNU Build System also supports networked setups where part of the installed files should be shared among multiple hosts. It does so by distinguishing architecture-dependent files from architecture-independent files, and providing two Makefile targets to install each of these classes of files.
These targets are install-exec
for architecture-dependent files
and install-data
for architecture-independent files.
The command we used up to now, make install
, can be thought of
as a shorthand for make install-exec install-data
.
From the GNU Build System point of view, the distinction between
architecture-dependent files and architecture-independent files is
based exclusively on the directory variable used to specify their
installation destination. In the list of directory variables we
provided earlier (see Standard Directory Variables), all the
variables based on exec-prefix designate architecture-dependent
directories whose files will be installed by make install-exec
.
The others designate architecture-independent directories and will
serve files installed by make install-data
. See The Two Parts of Install, for more details.
Here is how we could revisit our two-host installation example, assuming that (1) we want to install the package directly in /usr, and (2) the directory /usr/share is shared by the two hosts.
On the first host we would run
[HOST1] ~ % mkdir /tmp/amh && cd /tmp/amh [HOST1] /tmp/amh % /nfs/src/amhello-1.0/configure --prefix /usr ... [HOST1] /tmp/amh % make && sudo make install ...
On the second host, however, we need only install the architecture-specific files.
[HOST2] ~ % mkdir /tmp/amh && cd /tmp/amh [HOST2] /tmp/amh % /nfs/src/amhello-1.0/configure --prefix /usr ... [HOST2] /tmp/amh % make && sudo make install-exec ...
In packages that have installation checks, it would make sense to run
make installcheck
(see Basic Installation) to verify that
the package works correctly despite the apparent partial installation.