我试图找到一些sudo
-免费的解决方案,使我的用户安装和卸载我的应用程序。使用
set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/opt/${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}/")
SET(CMAKE_INSTALL_RPATH "$ENV{HOME}/${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}/")
我可以将文件定向到用户的主目录,并且
make install
关于What's the opposite of 'make install', ie. how do you uninstall a library in Linux?,我没有找到任何想法,这是sudo
免费的,对于一个非系统管理员来说并不复杂。
- CMake是否支持
make uninstall
?
1.我的卸载非常简单:所有的文件都放在用户主目录的一个子目录中。原则上,删除这个新的子目录可以解决这个问题。使用上面的参数make install
有什么副作用吗?或者我可以在我的用户指南中写上,新生成的子目录可以作为“卸载”删除?
6条答案
按热度按时间gpnt7bae1#
如果您要添加卸载目标,可以查看官方的CMake常见问题解答,网址为:
https://gitlab.kitware.com/cmake/community/wikis/FAQ#can-i-do-make-uninstall-with-cmake
如果您只是想快速卸载所有文件,只需运行:
install_manifest.txt
文件是在运行make install
时创建的。uinbv5nw2#
没有。请参阅CMake wiki的常见问题解答:
默认情况下,CMake不提供“make uninstall”目标,因此您无法执行此操作。我们不希望“make uninstall”从系统中删除有用的文件。
如果你想在你的项目中有一个“uninstall”目标,那么没有人会阻止你提供一个。你需要删除install_manifest. txt文件中列出的文件。[后跟一些示例代码]
yh2wf1be3#
从cmake项目中删除由
make install
添加的文件和文件夹(仅限空文件夹):第二个命令将打印一堆错误,因为它递归地删除文件夹,直到它找到一个不为空的文件夹。我喜欢看到这些错误,以了解哪些文件夹是离开。如果你想隐藏这些错误,你可以添加
--ignore-fail-on-non-empty
到rmdir。rsl1atfo4#
从源文件夹:
1.打开安装清单. txt(由
make install
创建)1.删除列出的所有目录/文件
1.移除任何丢失的剩余文件:
xargs rm < install_manifest.txt
个1.删除所有隐藏目录/文件:
$rm -rf ~/.packagename
删除源文件夹。
x6492ojm5#
将此添加到
CMakeLists.txt
,然后手工制作一个uninstall
目标。huwehgph6#
一个解决方案是使用CPack打包。在Linux中,这将创建一个可以由包管理器安装/卸载的包。在Windows中,使用NSIS生成器,您将获得一个安装程序,它也将uninstall.exe部署到您的程序文件中。
下面是一个创建debian软件包的基本例子:
然后使用
sudo dpkg -i foo-0.1.1-Linux.deb
代替make install DESTDIR=/usr/local
。要卸载,请使用
sudo dpkg -P foo
或sudo apt purge foo
。使用软件包管理器比使用
make install
有很多优点。dpkg -S /etc/foo
,它会告诉你哪个软件包“拥有”这个文件。