TL;DR: 在运行sudo make install
命令的目录中,先运行sudo make uninstall
。
你按照这个方法安装了不同版本的CMake。也就是说,你卸载了Ubuntu软件包管理器提供的版本,并从源代码手动下载、编译和安装了它。
假设你成功地按照这些说明操作,那么通过Ubuntu软件包管理器提供的CMake版本(通过cmake
软件包)已经被卸载了。因为你现在安装的版本不是由Ubuntu软件包管理器提供的,而是你自己编译和安装的版本,再次运行sudo apt-get purge cmake
并不会将其删除。
由于你通过编译并运行sudo make install
来安装cmake
,所以解决办法是:
- 使用
cd
命令返回到你运行该命令的目录。
- 运行
sudo make uninstall
。
不是所有可以通过运行
make install
来安装的软件都有相应的
uninstall
目标,让您可以运行
make uninstall
来删除它。但是CMake支持这一点。
1
如果您已经删除了运行sudo make install
的文件夹,或者以其他方式更改了它,那么最好的办法是重新构建和重新安装它(确保使用完全相同的版本),以恢复运行
sudo make uninstall
的能力。也就是说,您将按照相同的安装步骤进行操作,从相同的
.tar.gz
文件开始,并传递所有相同的选项(如果有的话)给
./bootstrap
。如果您只是在后面没有参数的情况下运行了
./bootstrap
,请再次运行它。再次运行
sudo make install
后,它会(无害地)覆盖已经安装的文件,并用它们自己的副本替换它们,然后您就可以使用
sudo make uninstall
了。
另一种可能的方法,我强烈不建议你这样做,是尝试准确地找出安装过程中创建的文件和目录,并仅删除这些文件和目录,而不删除其他任何文件。如果在编译CMake时没有传递
--prefix
给
./bootstrap
,那么它会将文件安装在
/usr/local
目录下,但这并不是唯一使用该目录的程序。它还会在
/usr/local
的各个子目录(如
bin
和
lib
等)中安装文件,所以除非你确定没有其他文件安装到
/usr/local
,否则这个选项需要大量工作。
1. 对于是否可以通过运行
sudo make uninstall
来卸载CMake,很容易产生困惑,因为默认情况下,当您使用CMake为自己的软件创建构建脚本时,除非您明确要求,否则不会生成
uninstall
目标。然而,CMake本身被设计成易于卸载,并且其源代码确实为自身定义了这些卸载目标。在运行
./bootstrap
后生成的
Makefile
中,您可以看到:
#=============================================================================
# Target rules for targets named uninstall
# Build rule for target.
uninstall: cmake_check_build_system
$(MAKE) -f CMakeFiles/Makefile2 uninstall
.PHONY : uninstall
# fast build rule for target.
uninstall/fast:
$(MAKE) -f CMakeFiles/uninstall.dir/build.make CMakeFiles/uninstall.dir/build
.PHONY : uninstall/fast
你还可以在
它的CMakeLists.txt文件中搜索
卸载支持。
为了确保,我使用CMake 3.9.0进行了测试,它是可以工作的。
uninstall
目标已生成,并且运行sudo make uninstall
可以卸载CMake。
sudo apt-get purge cmake
命令后得到的日志信息发出来吗? - AmeyaVScmake --version
命令显示的cmake版本是多少?另外,执行which cmake
命令的输出是什么? - AmeyaVSsudo make install
的相同位置运行sudo make uninstall
。(您自己创建并使用CMake生成构建脚本的程序不会自动支持此功能,但我相信CMake会。)我现在正在编译CMake来测试它,如果它有效,我会回答您,如果无效,我会进行评论。即使我错误地认为这个方法有效,我仍然建议您在手动删除文件之前等待其他答案一段时间。 - Eliah Kagan./bootstrap
,那么当你安装它时,它将安装相同的文件(无害地覆盖它们),然后你可以运行sudo make uninstall
。但在我完成检查sudo make uninstall
是否确实能够卸载CMake之前,你可能想等一下再尝试这个方法。(我会确保在我的回答中提到这种情况。) - Eliah Kagansudo make uninstall
确实可以工作,但它仍然保留了目录结构,这可能是您希望删除的空目录。对于之前的评论,我表示抱歉。 - AmeyaVS