I\'ve written a C++ program (command line, portable code) and I\'m trying to release a Linux version at the same time as the Windows version. I\'ve written a makefile as fol
make install is usually the step that "installs" the binary into the correct place.
For example, when compiling Vim, make install may place it in /usr/local/bin
Not all Makefiles have a make install
A less trivial installer will copy several things into place, first insuring that the appropriate paths exists (using mkdir -p
or similar). Typically something like this:
$INSTALL_PATH/bin
$INSTALL_PATH/lib
or $INSTALL_PATH/lib/yourappname
$INSTALL_PATH/share/man/man1
and possibly other sections if appropriate$INSTALL_PATH/share/yourappname
$INSTALL_PATH/etc/yourappname
$INSTALL_PATH/include/yourappname
The INSTALL_PATH
is an input to the build system, and usually defaults to /usr/local
. This gives your user the flexibility to install under their $HOME without needing elevated permission.
In the simplest case just use
INSTALL_PATH?=/usr/local
at the top of the makefile. Then the user can override it by setting an environment variable in their shell.
You also occasionally see make install
s that build a manifest to help with de-installation. The manifest can even be written as a script to do the work.
Another approach is just to have a make uninstall
that looks for the things make install
places, and removes them if they exist.
In the simplest case you just copy the newly created executable into the /usr/local/bin
path. Of course, it's usually more complicated than that.
Notice that most of these operations require special rights, which is why make install
is usually invoked using sudo
.