在运行

./configure --prefix=/mingw 

在我之前运行的一个库的MinGW/MSYS系统上

'./configure --prefix=/mingw && make && make install' 

我看到了这条信息:

警告:Vamp插件SDK的一个版本已经安装。如果您安装了新版本而没有先删除旧版本,那么您将会感到担忧和痛苦。(继续)

这让我很担心。“make install”的反义词是什么,即如何在Linux中卸载库?“清洁”能起作用吗,或者还有其他步骤吗?


当前回答

如果你有一个清单文件,其中列出了所有安装make install的文件,你可以运行这个命令,这是我从另一个答案:

cat install_manifest.txt | xargs echo rm | sh

如果你有sudo make install,你需要添加一个sudo到你的卸载:

cat install_manifest.txt | xargs echo sudo rm | sh

其他回答

如果你有一个清单文件,其中列出了所有安装make install的文件,你可以运行这个命令,这是我从另一个答案:

cat install_manifest.txt | xargs echo rm | sh

如果你有sudo make install,你需要添加一个sudo到你的卸载:

cat install_manifest.txt | xargs echo sudo rm | sh

Make可以告诉你它知道什么,它会做什么。 假设你有一个“install”目标,它执行如下命令:

cp <filelist> <destdir>/

在你的通用规则中,添加:

uninstall :; MAKEFLAGS= ${MAKE} -j1 -spinf $(word 1,${MAKEFILE_LIST}) install \
              | awk '/^cp /{dest=$NF; for (i=NF; --i>0;) {print dest"/"$i}}' \
              | xargs rm -f

一个类似的技巧可以做一个通用的使干净。

“stow”实用程序就是用来解决这个问题的:http://www.gnu.org/software/stow/

Make clean通常只清理包含源代码本身的目录中的构建文件,很少涉及任何已安装的软件。

makefile通常不包含卸载目标——通常必须自己卸载,从安装它们的目录中删除文件。例如,如果您构建了一个程序并将其安装到/usr/local中(使用make install),那么您将希望查看/usr/local/bin、/usr/local/libexec、/usr/local/share/man等,并删除不需要的文件。有时Makefile包含卸载目标,但并非总是如此。

当然,通常在Linux系统上,您使用包管理器安装软件,包管理器能够“自动地”卸载软件。

如何在“make install”后卸载

方法#1(制作卸载)

第1步:如果您以任何方式删除/更改了构建目录,则只需要遵循此步骤:下载和制作/制作安装,使用与前面完全相同的过程。

步骤2:尝试使卸载。

cd $SOURCE_DIR 
sudo make uninstall

如果成功,您就完成了。如果你是偏执狂,你也可以尝试“方法#3”的步骤,以确保使卸载没有遗漏任何文件。

方法2 (checkinstall—仅适用于基于debian的系统)

流程概述

在基于debian的系统中(例如Ubuntu),你可以通过使用名为checkinstall的工具很容易地创建.deb包。然后安装.deb包(这将使debian系统意识到包的所有部分确实已经安装),最后卸载它,让包管理器正确地清理系统。

一步一步

sudo apt-get -y install checkinstall
cd $SOURCE_DIR 
sudo checkinstall

此时checkinstall将提示输入包名。输入一些描述性的内容并记录下来,因为您马上就会用到它。它还会提示输入一些您可以忽略的数据。如果它抱怨版本不能被接受,那就输入一个合理的版本,比如1.0。当它完成时,你可以安装和卸载:

sudo dpkg -i $PACKAGE_NAME_YOU_ENTERED 
sudo dpkg -r $PACKAGE_NAME_YOU_ENTERED

方法#3 (install_manifest.txt)

如果源目录中存在一个文件install_manifest.txt,它应该包含安装创建的每个文件的文件名。

所以首先检查文件列表和它们的mod-time:

cd $SOURCE_DIR 
sudo xargs -I{} stat -c "%z %n" "{}" < install_manifest.txt

您应该得到零错误,所列文件的mod-times应该在安装时间或安装时间之后。如果一切正常,你可以一次性删除它们:

cd $SOURCE_DIR 
mkdir deleted-by-uninstall
sudo xargs -I{} mv -t deleted-by-uninstall "{}" < install_manifest.txt

然而,用户Merlyn Morgan-Graham对于这种方法有一个你应该记住的严肃注意事项(在这里逐字复制):“小心那些可能也被其他包安装的文件。只需删除这些文件[…]可能会破坏其他的包裹。”这就是为什么我们创建了delete -by-uninstall目录,并将文件移动到那里,而不是删除它们。


这篇文章99%的内容都存在于其他答案中。我只是将所有有用的东西收集在一个(希望)易于遵循的操作指南中,并试图对重要的细节给予额外的关注(比如引用xarg参数和备份已删除的文件)。