我试图找到一些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}/")
Run Code Online (Sandbox Code Playgroud)
我可以将文件定向到用户的主目录,和
make install
Run Code Online (Sandbox Code Playgroud)
工作良好.参考
'make install'的相反之处,即.如何在Linux中卸载库?
我没有找到任何想法,sudo
对于非系统管理员来说,这是免费的并且并不复杂.
无论如何make uninstall
由CMake支持?
我的卸载非常简单:所有文件都放在用户家中的子目录中.原则上,删除该新子目录可以解决问题.有make install
上述参数,有任何副作用,或者我可以在我的用户指南中写入新生成的子目录可以作为'卸载'删除?
小智 50
如果您想添加卸载目标,可以查看官方CMake常见问题解答:
https://gitlab.kitware.com/cmake/community/wikis/FAQ#can-i-do-make-uninstall-with-cmake
如果您只想快速卸载所有文件,只需运行:
xargs rm < install_manifest.txt
Run Code Online (Sandbox Code Playgroud)
install_manifest.txt
运行时会创建文件make install
.
usr*_*567 23
不,那里没有.请参阅CMake wiki的常见问题解答:
默认情况下,CMake不提供"make uninstall"目标,因此您无法执行此操作.我们不希望"make uninstall"从系统中删除有用的文件.
如果您想在项目中使用"卸载"目标,那么没有人会阻止您提供.您需要删除install_manifest.txt文件中列出的文件.[后跟一些示例代码]
qwe*_*guy 16
删除make install
cmake项目添加的文件和文件夹(仅为空):
cat install_manifest.txt | sudo xargs rm
cat install_manifest.txt | xargs -L1 dirname | sudo xargs rmdir -p
Run Code Online (Sandbox Code Playgroud)
第二个命令将打印一堆错误,因为它会递归删除文件夹,直到找到一个非空的文件夹.我喜欢看到这些错误,知道剩下哪些文件夹.如果要隐藏这些错误,可以添加--ignore-fail-on-non-empty
到rmdir.
# make uninstall
add_custom_target("uninstall" COMMENT "Uninstall installed files")
add_custom_command(
TARGET "uninstall"
POST_BUILD
COMMENT "Uninstall files with install_manifest.txt"
COMMAND xargs rm -vf < install_manifest.txt || echo Nothing in
install_manifest.txt to be uninstalled!
)
Run Code Online (Sandbox Code Playgroud)
将其添加到CMakeLists.txt
,然后uninstall
手动制作目标。
一种解决方案是使用 CPack 进行打包。在 Linux 中,这将创建一个可以由包管理器安装/卸载的包。在带有 NSIS 生成器的 Windows 中,您将获得一个安装程序,该安装程序还将 uninstall.exe 部署到您的程序文件中。
这是创建 debian 包的基本示例:
$ touch file
$ cat CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
install(FILES file DESTINATION etc)
set(CPACK_PACKAGE_NAME foo)
set(CPACK_PACKAGE_CONTACT "me <me@example.com>")
set(CPACK_GENERATOR DEB)
include(CPack)
$ cmake .
$ cpack
Run Code Online (Sandbox Code Playgroud)
然后改为make install DESTDIR=/usr/local
使用sudo dpkg -i foo-0.1.1-Linux.deb
.
要卸载,请使用sudo dpkg -P foo
或sudo apt purge foo
。
使用包管理器的优点make install
有很多。以下是一些:
dpkg -S /etc/foo
,它会告诉你哪个包“拥有”这个文件。从源文件夹:
打开 install_manifest.txt(创建者make install
)
删除列出的所有目录/文件
删除您错过的任何剩余文件:
xargs rm < install_manifest.txt
删除任何隐藏的目录/文件:
$rm -rf ~/.packagename
删除源文件夹。
归档时间: |
|
查看次数: |
29951 次 |
最近记录: |