在运行

./configure --prefix=/mingw 

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

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

我看到了这条信息:

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

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


当前回答

Make

Make是用来安装从源代码编译的程序的程序。它不是Linux包管理器,所以它不会跟踪它安装的文件。这使得之后很难卸载这些文件。

Make Install命令将构建的程序和包从makefile复制到库目录和指定位置。这些位置 可能会根据配置脚本执行的检查而有所不同。

CheckInstall

CheckInstall是用于安装或卸载从源代码编译的程序的程序。它监视并复制使用make程序安装的文件。它还使用Linux包管理器安装文件,这允许它像任何常规包一样卸载。

CheckInstall命令用于调用Make Install命令。它监视已安装的文件并从中创建一个二进制包。它还使用Linux包管理器安装二进制包。

将“source_location.deb”和“name”替换为屏幕截图中的信息。

在源包目录下执行以下命令:

安装CheckInstall sudo apt-get Install CheckInstall 执行配置脚本sudo ./ Configure 执行Make命令sudo Make 执行CheckInstall sudo CheckInstall命令 重新安装软件包sudo dpkg——install——force-overwrite source_location.deb 删除包sudo apt Remove name

这是我写的一篇文章,涵盖了整个过程的解释。

其他回答

清除源代码/构建树中的任何中间文件或输出文件。然而,它只影响源代码/构建树;它不会触及文件系统的其余部分,因此不会删除先前安装的软件。

如果幸运的话,运行make uninstall就可以了。然而,这取决于图书馆的作者来提供;有些作者提供了卸载目标,有些则没有。

如果你不幸运,你将不得不手动卸载它。运行make -n install可能会很有帮助,因为它将显示软件安装自己所采取的步骤,但实际上不会执行任何操作。然后可以手动反转这些步骤。

如何在“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参数和备份已删除的文件)。

不幸的是,没有标准,这是从源代码安装的危险之一。一些makefile文件将包含“卸载”,因此

make uninstall

从源目录可以工作。否则,可能需要手动撤销make install所做的一切。

Make clean通常只是清理源目录-删除生成/编译的文件之类的,可能不是你想要的。

我知道很少有包支持“make uninstall”,但更多的包支持“make install DESTDIR=xxx”进行分期安装。

您可以使用它来创建一个包来安装,而不是直接从源代码安装。我没有运气与checkinstall,但fpm工作得很好。

这还可以帮助您删除之前使用make install安装的包。您只需强制在make installed的包上安装您构建的包,然后卸载它。

例如,我最近使用它来处理protobuf-3.3.0。 RHEL7:

make install DESTDIR=dest
cd dest
fpm -f -s dir -t rpm -n protobuf -v 3.3.0 \
 --vendor "You Not RedHat" \
 --license "Google?" \
 --description "protocol buffers" \
 --rpm-dist el7 \
 -m you@youraddress.com \
 --url "http:/somewhere/where/you/get/the/package/oritssource" \
 --rpm-autoreqprov \
 usr

 sudo rpm -i -f protobuf-3.3.0-1.el7.x86_64.rpm
 sudo rpm -e protobuf-3.3.0      

如果可以的话,你更喜欢yum而不是rpm。

Debian9:

make install DESTDIR=dest
cd dest
fpm -f -s dir -t deb -n protobuf -v 3.3.0 \
-C `pwd` \
--prefix / \
--vendor "You Not Debian" \
--license "$(grep Copyright ../../LICENSE)" \
--description "$(cat README.adoc)" \
--deb-upstream-changelog ../../CHANGES.txt \
 --url "http:/somewhere/where/you/get/the/package/oritssource" \
 usr/local/bin \
 usr/local/lib \
 usr/local/include

 sudo apt install -f *.deb
 sudo apt-get remove protobuf

在你能做到的地方,你更喜欢倾向于dpkg。

我也把答案贴在这里了

如果sudo make uninstall不可用:

在基于Debian的系统中,你可以运行sudo checkinstall来生成一个自动安装的.deb文件,而不是(或在*之后)执行make install。然后,您可以使用系统包管理器(例如apt/synaptic/aptitude/dpkg)删除它。Checkinstall还支持创建其他类型的包,例如RPM。

参见http://community.linuxmint.com/tutorial/view/162和一些基本的checkinstall用法和debian checkinstall包。


*:如果你是在安装了make install后阅读这篇文章,你仍然可以按照上面的说明,然后执行dpkg -r $PACKAGE_NAME_YOU_CHOSEN。