I am trying to make software install to a specific directory. I found several ways, but not sure what are the differences between them.
./configure --prefix=***
make install --prefix=***
make install DESTDIR=***
make install prefix=***
I am confused about the functions of these four. Do they achieve the same goal?
Number 1 determines where the package will go when it is installed, and where it will look for its associated files when it is run. It's what you should use if you're just compiling something for use on a single host.
Number 2 is simply an error as far as I know.
Number 3 is for installing to a temporary directory which is not where the package will be run from. For example this is used when building
deb
packages. The person building the package doesn't actually install everything into its final place on his own system. He may have a different version installed already and not want to disturb it, or he may not even be root. So he usesso the program will expect to be installed in
/usr
when it runs, thento actually create the directory structure.
Number 4 is going to install it to a different place but not create all the directories as
DESTDIR=/foo/bar/baz
would. It's commonly used with GNU stow via, which would install binaries in
/usr/local/stow/foo/bin
. By comparison,would install binaries in
/usr/local/stow/foo/usr/local/bin
. That's probably what Number 2 was really supposed to be.This can help illustrating the use of
DESTDIR
and--prefix
(from here):