跑步时
./configure --prefix=/mingw
在我以前运行的库的MinGW / MSYS系统上
'./configure --prefix=/mingw && make && make install'
我看到了这条消息:
警告:已安装Vamp插件SDK的一个版本。如果您安装新版本而不先删除旧版本,则会出现忧虑和悲伤。 (继续)
这让我很担心。与'make install'相反的是什么,即如何在Linux中卸载库? “干净”是否可以完成工作,还是涉及其他步骤?
答案 0 :(得分:470)
make clean
从源/构建树中删除任何中间或输出文件。但是,它只影响源/构建树;它不会触及文件系统的其余部分,因此不会删除以前安装的软件。
如果你很幸运,运行make uninstall
会有效。然而,这取决于图书馆的作者提供的内容;有些作者提供了uninstall
目标,有些则没有。
如果你不幸运,你必须手动卸载它。运行make -n install
可能会有所帮助,因为它将显示软件安装自身所需的步骤,但实际上不会执行任何操作。然后,您可以手动撤消这些步骤。
答案 1 :(得分:326)
如果sudo make uninstall
不可用:
在基于Debian的系统中,代替(或在*之后)执行make install
,您可以运行sudo checkinstall
来生成自动安装的.deb
文件。然后,您可以使用系统软件包管理器将其删除(例如apt
/ synaptic
/ aptitude
/ dpkg
)。 Checkinstall 还支持创建其他类型的包,例如RPM。
另请参阅http://community.linuxmint.com/tutorial/view/162和some basic checkinstall usage以及debian checkinstall package。
*:如果您在使用make install
安装后仍在阅读此内容,则仍可按照上述说明操作,然后再执行dpkg -r $PACKAGE_NAME_YOU_CHOSEN
。
答案 2 :(得分:55)
如果您有一个manifest
文件,其中列出了使用make install
安装的所有文件,您可以从另一个答案运行此命令:
cat install_manifest.txt | xargs echo rm | sh
如果您有sudo make install
,则需要在卸载时添加sudo:
cat install_manifest.txt | xargs echo sudo rm | sh
答案 3 :(得分:24)
根据所讨论程序的makefile / configure脚本/ autofoo魔法的不同程度,以下内容可能会解决您的问题:
make uninstall
问题是您应该在已安装的版本的源树上执行此操作,并使用与安装时完全相同的配置。
答案 4 :(得分:12)
第1步:如果您以任何方式删除/更改了构建目录,则只需执行此步骤:使用完全下载并make / make install和以前一样的程序。
第2步:尝试make uninstall。
cd $SOURCE_DIR
sudo make uninstall
如果,这成功就完成了。如果你是偏执狂,你也可以尝试“方法#3”的步骤,以确保make uninstall
没有错过任何文件。
流程概述
在基于debian的系统(例如Ubuntu)中,您可以使用名为.deb
的工具轻松创建checkinstall
包。然后安装.deb软件包(这将使你的debian系统意识到你的软件包的所有部分都已安装完毕)并最终卸载它以让你的软件包管理器正确清理你的系统。
一步一步
sudo apt -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
如果源目录中存在文件install_manifest.txt
,则它应包含安装所创建的每个文件的文件名。
首先检查文件列表及其模态时间:
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对此方法有严重的通知,您应该记住(这里逐字复制):“注意其他软件包可能已安装的文件。只需删除这些文件[...]可以打破其他包裹。“。这就是我们创建deleted-by-uninstall
目录并在那里移动文件而不是删除它们的原因。
这篇文章的99%存在于其他答案中。我收集了一些有用的内容(希望)很容易遵循的方法,并试图给予额外的关注重要细节(比如引用xarg参数并保留已删除文件的备份)。
答案 5 :(得分:10)
make clean
通常只清理包含源代码本身的目录中的构建文件,并且很少涉及任何已安装的软件。
Makefile通常不包含卸载目标 - 您通常必须通过从安装它们的目录中删除文件来自行完成。例如,如果您构建了一个程序并将其(使用make install
)安装到/usr/local
中,那么您需要查看/usr/local/bin
,/usr/local/libexec
,/usr/local/share/man
等,并删除不需要的文件。有时,Makefile包含uninstall
目标,但并非总是如此。
当然,通常在Linux系统上使用软件包管理器安装软件,该软件能够“自动”卸载软件。
答案 6 :(得分:7)
“stow”实用程序旨在解决此问题:http://www.gnu.org/software/stow/
答案 7 :(得分:5)
遗憾的是没有标准,这是从源代码安装的危险之一。一些Makefile将包含“卸载”,所以
make uninstall
源目录中的可能有效。否则,可能需要手动撤消make install
所做的任何事情。
make clean
通常只是清理源目录 - 删除生成/编译的文件等,可能不是你想要的。
答案 8 :(得分:3)
制作
Make是用于安装从源代码编译的程序的程序。它不是Linux软件包管理器,因此无法跟踪其安装的文件。这使得以后很难卸载文件。
Make Install命令将已编译的程序和程序包复制到库目录和makefile中的指定位置。这些地点 可能会根据配置脚本执行的检查而有所不同。
CheckInstall
CheckInstall是用于安装或卸载从源代码编译的程序的程序。它监视并复制使用make程序安装的文件。它还使用Linux软件包管理器安装文件,从而可以像常规软件包一样将其卸载。
CheckInstall命令用于调用Make Install命令。它监视已安装的文件并从中创建一个二进制包。它还使用Linux软件包管理器安装二进制软件包。
用 Screenshot中的信息替换“ source_location.deb”和“名称”。
在源软件包目录中执行以下命令:
sudo apt-get install checkinstall
sudo ./configure
sudo make
sudo checkinstall
sudo dpkg --install --force-overwrite source_location.deb
sudo apt remove name
这是我写的文章article,其中包含解释的整个过程。
答案 9 :(得分:1)
方法一
来自源文件夹:
#make uninstall
方法二
如果没有卸载程序:
打开 install_manifest.txt(由 #make install
创建)
删除列出的所有目录/文件
删除您遗漏的任何剩余文件:
#xargs rm < install_manifest.txt
删除所有隐藏的目录/文件:
$rm -rf ~/.packagename
删除源文件夹。
方法三
如果以上选项都不起作用,请查看安装过程:
#make -n install
并反转安装过程:
#rm -rf all directories/files created
示例
例如,这是如何从源代码卸载 nodejs、npm 和 nvm:
How do I completely uninstall Node.js, and reinstall from beginning (Mac OS X)
您可以使用上述任何一种方法。
答案 10 :(得分:0)
我知道很少有支持“卸载”的软件包,但更多支持分阶段安装的“ make install DESTDIR = xxx”软件包。
您可以使用它来创建要安装的软件包,而不是直接从源代码安装。我对checkinstall不太满意,但是fpm的表现很好。
这还可以帮助您删除以前使用 make install 安装的软件包。您只需在已安装的make软件包上强制安装已构建的软件包,然后将其卸载。
例如,我最近使用它来处理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。
我还发布了对此here
的答案答案 11 :(得分:0)
Make
可以告诉您它知道什么以及它将做什么。
假设您有一个“安装”目标,该目标执行以下命令:
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
类似的技巧可以实现通用的make clean
。
答案 12 :(得分:0)
序言
下面的可能有效或无效,所有内容均按原样提供,在某些损坏,数据丢失等情况下,您和您仅是负责人。但我希望一切顺利!
要撤消make install
,我会(而且我确实)这样做:
想法:检查安装的脚本并使用简单的bash脚本撤消该操作。
--prefix=$PWD/install
。对于CMake,您可以转到构建目录,打开CMakeCache.txt,并修复CMAKE_INSTALL_PREFIX值。make install
)。make install
脚本安装到您要从其他位置(通常为/usr/local
)删除的相同内容上。因此,我们需要一个脚本。
3.1。脚本应将自定义目录与要清除的目录进行比较。我用这个:anti-install.sh
RM_DIR=$1
PRESENT_DIR=$2
echo "Remove files from $RM_DIR, which are present in $PRESENT_DIR"
pushd $RM_DIR
for fn in `find . -iname '*'`; do
# echo "Checking $PRESENT_DIR/$fn..."
if test -f "$PRESENT_DIR/$fn"; then
# First try this, and check whether things go plain
echo "rm $RM_DIR/$fn"
# Then uncomment this, (but, check twice it works good to you).
# rm $RM_DIR/$fn
fi
done
popd
3.2。现在只需运行此脚本(它将空运行)
bash anti-install.sh <dir you want to clean> <custom installation dir>
例如您不需要清理/ usr / local,并且自定义安装目录是/user/me/llvm.build/install,那么它将是
bash anti-install.sh /usr/local /user/me/llvm.build/install
3.3。仔细检查日志,如果命令对您有用,请取消注释rm $RM_DIR/$fn
并再次运行。 但是请停下!。您是否认真检查过?可能会再次检查吗?
说明来源: https://dyatkovskiy.com/2019/11/26/anti-make-install/
祝你好运!