makefile centos - What's the opposite of 'make install', i.e.how do you uninstall a library in Linux?
cmake python (8)
sudo make uninstall is unavailable:
In a Debian based system, instead of (or after*) doing
make install you can run
sudo checkinstall to make a
.deb file that gets automatically installed. You can then remove it using the system package manager (e.g.
dpkg). Checkinstall also supports creating other types of package, e.g. RPM.
*: If you're reading this after having installed with
make install you can still follow the above instructions and do a
dpkg -r $PACKAGE_NAME_YOU_CHOSEN afterwards.
on a MinGW/MSYS system for a library I had previously run
'./configure --prefix=/mingw && make && make install'
I came across this message:
WARNING: A version of the Vamp plugin SDK is already installed. Expect worries and sorrows if you install a new version without removing the old one first. (Continuing)
This had me worried. What's the opposite of 'make install', i.e. how is a library uninstalled in Linux? Will 'make clean' do the job, or are there other steps involved?
make clean generally only cleans built files in the directory containing the source code itself, and rarely touches any installed software.
Makefiles generally don't contain a target for uninstallation -- you usually have to do that yourself, by removing the files from the directory into which they were installed. For example, if you built a program and installed it (using
make install) into
/usr/local, you'd want to look through
/usr/local/share/man, etc., and remove the unwanted files. Sometimes a Makefile includes an
uninstall target, but not always.
Of course, typically on a Linux system you install software using a package manager, which is capable of uninstalling software "automagically".
The "stow" utility was designed to solve this problem: http://www.gnu.org/software/stow/
There is no standard unfortunately, this is one of the perils of installing from source. Some Makefiles will include an "uninstall", so
from the source directory may work. Otherwise, it may be a matter of manually undoing whatever the
make install did.
make clean usually just cleans up the source directory - removing generated/compiled files and the like, probably not what you're after.
If you have a
manifest file which lists all the files that were installed with
make install you can run this command which I have from another answer:
cat install_manifest.txt | xargs echo rm | sh
If you have
sudo make install you will need to add a sudo to your uninstall:
cat install_manifest.txt | xargs echo sudo rm | sh
Depending on how well the makefile/configure script/autofoo magic of the program in question is the following might solve your problem:
The problem is that you should execute this on the source tree of the version you've got installed and with exactly the same configuration that you used for installing.
make clean removes any intermediate or output files from your source / build tree. However, it only affects the source / build tree; it does not touch the rest of the filesystem and so will not remove previously installed software.
If you're lucky, running
make uninstall will work. It's up to the library's authors to provide that, however; some authors provide an
uninstall target, others don't.
If you're not lucky, you'll have to manually uninstall it. Running
make -n install can be helpful, since it will show the steps that the software would take to install itself but won't actually do anything. You can then manually reverse those steps.
The problem is that when Vim runs other commands via
:grep, those commands don't get a terminal for their standard output -- in the sense that for them isatty(STDOUT_FILENO) is false -- because Vim is capturing the output on its way to being displayed on the terminal. On the other hand, when you use
:!grep, standard output is just going to the terminal.
Clang by default and
grep --color=auto (which is probably how you have it aliased) use the terminalness of stdout to decide whether to colourise their output. This is convenient in that you get colourful output on your terminal but capture just the text when you redirect output to a file -- all without needing to add extra command line options.
So what you want to do is override these commands' usual smarts so that they always colourise their output.
grep, you can use
--color=always when it is run via
:grep within Vim:
:set grepprg=grep\ --color=always\ -n\ $*\ /dev/null
and depending on your colour settings and version of
grep this will work well enough.
For clang, you can change your Makefile to use
clang -fcolor-diagnostics so as to force colourisation or more flexibly add an extra variable to
$(CC) that will be overridden when run via
:make within Vim:
:set makeprg=make\ EXTRA_CFLAGS=-fcolor-diagnostic
However (at least with clang 3.0 and vim 7.3) you will find that clang's style of colourisation prevents Vim from picking out filenames and line numbers from the diagnostics, so doing this wrecks the advantage of using
:make rather than
You may be able to teach Vim to pick out the filenames etc from the surrounding ANSI escape sequences that do the colourisation by adding more entries to Vim's
errorformat option to match the colourised clang-style diagnostics. (And similarly with
grepformat if your
grep colourisation colours the filenames or linenumbers.)