与'make install'相反的是什么,即如何在Linux中卸载库?

377 makefile uninstall

在跑步的时候

./configure --prefix=/mingw 
Run Code Online (Sandbox Code Playgroud)

在我以前运行的库的MinGW/MSYS系统上

'./configure --prefix=/mingw && make && make install' 
Run Code Online (Sandbox Code Playgroud)

我发现了这条消息:

警告:已安装Vamp插件SDK的一个版本.如果您安装新版本而不先删除旧版本,则会出现忧虑和悲伤.(继续)

这让我很担心.与'make install'相反的是什么,即如何在Linux中卸载库?"干净"会做这项工作,还是涉及其他步骤?

Jos*_*ley 490

make clean从源/构建树中删除任何中间或输出文件.但是,它只影响源/构建树; 它不会触及文件系统的其余部分,因此不会删除以前安装的软件.

如果你很幸运,跑步make uninstall会起作用.然而,这取决于图书馆的作者提供的内容; 有些作者提供了uninstall目标,有些则没有.

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

  • +1; 注意可能也已由其他软件包安装的文件.简单地删除这些文件("手动反转这些步骤"的一种解释)可能会破坏其他包.这是(原因之一)为什么包装经理被发明了. (9认同)
  • 这只有在你保持相同的配置和编译的构建目录的情况下才有可能吗?因此大多数人会在安装后删除它,因此不是很有用.他想要卸载的东西,无论他是否保留了build文件夹,无论是否已为make uninstall选项正确配置了包.澄清:他想要做的是为包他自己编译的东西启用某种管理. (3认同)

Nis*_*sse 344

如果sudo make uninstall不可用:

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

另请参阅http://community.linuxmint.com/tutorial/view/162以及一些基本的checkinstall用法debian checkinstall包.


*:如果您在安装后阅读此内容,make install仍然可以按照上述说明操作,dpkg -r $PACKAGE_NAME_YOU_CHOSEN然后再进行操作.

  • 这个答案证明了最好的答案通常不会得到很多的投票.谢谢!我很想知道如何做这件事.我总是犹豫做一个"make install",因为我知道删除几乎肯定会很痛苦. (52认同)
  • 尽管我在使用`checkinstall`之前已经运行了'make install`,但这对我来说非常有效. (12认同)
  • 安装包`checkinstall`以获得这个出色的工作答案. (8认同)
  • 你可以生成一个 `.deb` 文件,而无需使用 `checkinstall --install=no` 实际安装它 (6认同)

thr*_*ree 59

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

cat install_manifest.txt | xargs echo rm | sh
Run Code Online (Sandbox Code Playgroud)

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

cat install_manifest.txt | xargs echo sudo rm | sh
Run Code Online (Sandbox Code Playgroud)

  • 我很惊讶地看到这没有得到任何赞成.当没有其他选项工作时,这可以从系统中删除文件.在我的情况下,checkinstall无法创建deb,因为程序的版本没有以数字开头,因此无法构建.这很好用. (4认同)
  • (作为参考,它会对shell解释的文件名中的任何字符进行barf(然后你就会执行流氓'rm!),另外它会进行各种shell扩展.想象一下如果`install_manifest会发生什么. txt`包含一个星号......`rm*`将通过管道传输到shell中.)为此,请注意. (4认同)
  • @DWils我认为它没有得到更多的赞成,因为它非常危险.另外,`xargs echo rm | sh`?很明显,无论谁提出这个问题,在使用shell时都没有特别的经验或知识. (3认同)

Joa*_*uer 24

根据所讨论程序的makefile/configure脚本/ autofoo魔法的好坏,以下内容可能会解决您的问题:

make uninstall
Run Code Online (Sandbox Code Playgroud)

问题是您应该在已安装的版本的源树上执行此操作,并使用与安装时完全相同的配置.


nde*_*mou 17

如何在"make install"后卸载

方法#1(make uninstall)

步骤1:如果您以任何方式删除/更改了构建目录,只需执行此步骤:使用与之前完全相同的过程下载并make/make install .

第2步:尝试make uninstall.

cd $SOURCE_DIR 
sudo make uninstall
Run Code Online (Sandbox Code Playgroud)

如果成功,你就完成了.如果你是偏执狂,你也可以尝试"方法#3"的步骤,以确保make uninstall没有错过任何文件.

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

流程概述

在基于debian的系统(例如Ubuntu)中,您可以.deb使用名为的工具轻松创建包checkinstall.然后安装.deb软件包(这将使你的debian系统意识到你的软件包的所有部分都已安装完毕)并最终卸载它以让你的软件包管理器正确清理你的系统.

一步步

sudo apt -y install checkinstall
cd $SOURCE_DIR 
sudo checkinstall
Run Code Online (Sandbox Code Playgroud)

此时checkinstall将提示输入包名称.输入一些描述性的东西并记下它,因为你会在一分钟内使用它.它还会提示您可以忽略的更多数据.如果它抱怨版本不被接受,只需输入合理的内容即可1.0.完成后,您可以安装并最终卸载:

sudo dpkg -i $PACKAGE_NAME_YOU_ENTERED 
sudo dpkg -r $PACKAGE_NAME_YOU_ENTERED
Run Code Online (Sandbox Code Playgroud)

方法#3(install_manifest.txt)

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

所以首先检查文件列表及其模态时间:

cd $SOURCE_DIR 
sudo xargs -I{} stat -c "%z %n" "{}" < install_manifest.txt
Run Code Online (Sandbox Code Playgroud)

您应该获得零错误,并且列出的文件的mod-times应该在安装时间之后或之后.如果一切正常,您可以一次删除它们:

cd $SOURCE_DIR 
mkdir deleted-by-uninstall
sudo xargs -I{} mv -t deleted-by-uninstall "{}" < install_manifest.txt
Run Code Online (Sandbox Code Playgroud)

然而,用户Merlyn Morgan-Graham对此方法有严重的通知,您应该记住(这里逐字复制):"注意其他软件包可能已安装的文件.只需删除这些文件[...]即可打破其他包裹." .这就是我们创建deleted-by-uninstalldir并将文件移到那里而不是删除它们的原因.


99%的帖子存在于其他答案中.我刚刚收集了一些有用的内容(希望)易于遵循的方法,并试图特别注意重要的细节(比如引用xarg参数并保留已删除文件的备份).


mip*_*adi 10

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

Makefile通常不包含卸载目标 - 您通常必须自己执行此操作,方法是从安装它们的目录中删除文件.例如,如果你建立了一个程序,并安装它(使用make install)进入/usr/local,你会想看看通过/usr/local/bin,/usr/local/libexec,/usr/local/share/man,等,并删除不需要的文件.有时Makefile包含uninstall目标,但并非总是如此.

当然,通常在Linux系统上使用软件包管理器安装软件,软件管理器能够"自动"卸载软件.


jjw*_*jjw 8

"stow"实用程序旨在解决此问题:http://www.gnu.org/software/stow/

  • 怎么会用'stow`来解决这个问题呢? (5认同)

V L*_* Li 7

方法一

从源文件夹:

#make uninstall

方法二

如果没有卸载过程:

  1. 打开 install_manifest.txt (由 创建#make install

  2. 删除列出的所有目录/文件

  3. 删除您错过的所有剩余文件:

    #xargs rm < install_manifest.txt

  4. 删除所有隐藏的目录/文件:

    $rm -rf ~/.packagename

删除源文件夹。

方法三

如果以上选项均不起作用,请查看安装过程:

#make -n install

并反转安装过程:

#rm -rf all directories/files created

例子

例如,以下是从源卸载nodejs、npm和nvm的方法:

如何完全卸载 Node.js,并从头开始重新安装 (Mac OS X)

您可以使用上述任何方法来完成此操作。


Bre*_*ker 5

遗憾的是没有标准,这是从源代码安装的危险之一.一些Makefile将包含"卸载",所以

make uninstall
Run Code Online (Sandbox Code Playgroud)

从源目录可能工作.否则,可能是手动撤消make install所做的事情.

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