如何在Ubuntu上升级cmake

CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
  CMake 3.6.0 or higher is required.  You are running version 3.5.1
-- Configuring incomplete, errors occurred!

我知道Ubuntu使用稳定版本来提供支持,但有些软件仓库需要更高版本的cmake。我想用较新的cmake覆盖旧版本,但常见的PPA没有我需要的cmake版本。我该如何升级cmake以使用所需的版本而不与旧版本发生冲突?
3个回答

警告 - 如果您已安装机器人操作系统(ROS),请不要执行第2步。
  1. 使用以下命令检查当前版本:

    cmake --version
    
  2. 使用以下命令卸载:

    sudo apt remove cmake
    
  3. 访问https://cmake.org/download/并下载最新的bash脚本。

    • 在我的情况下,cmake-3.6.2-Linux-x86_64.sh就足够了。
  4. 将脚本复制到/opt/目录下。

  5. 使脚本可执行:

    chmod +x /opt/cmake-3.*your_version*.sh
    
  6. 切换到所需的安装目录(例如/opt/

    • 从cmake 3.10.2开始,默认不再安装到/opt目录下
  7. 运行:

    sudo bash /opt/cmake-3.*your_version*.sh
    

    您需要按两次y

  8. 脚本将二进制文件安装到/opt/cmake-3.*your_version*,因此为了使用cmake命令,


8不要以为你需要卸载旧的 cmake,因为 /usr/local/binPATH 中位于 /usr/bin 之前。所以一旦你在最后一步创建符号链接,cmake 命令将调用你的新 cmake 而不是旧的。 - edwinksl
是的,但根据我在其他论坛上阅读到的内容,大多数用户宁愿避免潜在的混淆。 - Wolf
19根据Matt的观察,如果你是ROS用户,请不要运行"REMOVE CMAKE"命令运行这个命令将会移除当前的cmake版本,但也会移除ROS分发的部分内容,导致一切都崩溃,并迫使你重新安装与ROS相关的所有内容。应该在这个命令中添加一个警告,或者至少在最佳答案中包含一种更新cmake的方法,而不是移除和替换。 - sempaiscuba
17ROS... "机器人操作系统"? - user1122069
我正在通过脚本在容器中运行这个,所以我需要将两个"y"传递给脚本吗?他们计划让cmake能够自动升级吗? - Timothy Swan
11从cmake 3.10.2版本开始,安装程序似乎不再默认安装到/opt目录,而是安装到当前目录。因此,用户需要相应地修改第6步骤。 - JorgeGT
6我已经做了这一切,但是当我输入"cmake --version"时,它显示命令 Cmake 未找到 :( - DINA TAKLIT
@JorgeGT,这种情况该怎么办?我在那一步卡住了!在输入cmake --version时,命令提示符显示错误信息-bash: /usr/bin/cmake: No such file or directory - smerllo
2@Cs20 我在Ubuntu 16.04上遇到了同样的问题,所以我不得不执行sudo ln -s /usr/local/bin/cmake /usr/bin/cmake命令。 - Kyle Falconer
1而且没有人解释ROS是什么... - axd
在Windows子系统上,我使用CMake 3.16.4可以正常工作。 - Matthieu H
5万一其他人犯同样的错误:在最后一步中,提供CMake二进制文件的完整路径给符号链接。否则,bash仍然找不到这些文件。 - yuqli
实际上,如果您连续按两次"y"键,它将不会安装在/opt/目录下。因为第二个"Y"是确认您希望将其安装在您的home/user目录中的子文件夹内。因此,符号链接将指向那里,而不是/opt/目录。 - mayid
1@axd ROS是“机器人操作系统”https://www.ros.org。 - KansaiRobot
需要使用CMake 3.16或更高版本。您正在使用3.5.1版本。这是一个玩笑吗?我在Ubuntu 16.04上。 - bhordupur
@bhordupur 不是的... 16 > 5。 - Karu
1对于任何阅读到这里的人,我完全推荐观看这个视频,教你如何在Linux系统中安装最新版本的cmake,而不需要删除之前的版本:https://youtu.be/_yFPO1ofyF0。它运行得非常完美,视频作者详细解释了每一步骤。 - jespestana
无问题完成此操作的提示:1. 使用Tab键来自动补全/opt/cm ... TAB。2. 不要忘记在/usr/local/bin之前加上/ - Gulzar
如何自动化按两次y键?尝试在Docker中安装。 - Gulzar
@Gulzar 你可以使用标志“--skip-license”安装它,它不会要求许可证。 - zupazt3
使用这种方法安装时,CMake 抱怨找不到一些东西。对我来说有效的方法是直接在 /usr/local/ 目录下安装,而不是在 /opt/ 目录下安装然后创建链接。命令应该是 sudo bash <path/to/script>/cmake<version>.sh --skip-license --exclude-subdir --prefix=/usr/local - John
我正在编写一个Dockerfile,将cmake放入其中,工作目录只是简单的/,因此在第8步中,我执行sudo ln -s /cmake-3.*your_version*/bin/* /usr/local/bin - kelvin hong 方

在新版本的cmake(例如:3.9.6)中,要进行安装,请从https://cmake.org/download/下载tar文件。解压下载的tar文件,然后执行以下操作:
cd $CMAKE_DOWNLOAD_PATH
./configure
make
sudo make install

3我喜欢这个解决方案,因为它可以说是解决问题最纯粹的方式。(只需构建软件。)不需要瞎折腾PPA或其他什么的。谢谢! - Max von Hippel
1这是一个自洽的解决方案。对我来说很有效。 - Yuanhui
我这样做是为了升级到3.17版本,但在执行sudo make install后出现以下错误信息: CMake错误:找不到CMAKE_ROOT!!! 很可能CMake没有正确安装。 在/usr/local/share/cmake-3.16目录下未找到模块文件夹。 CMake版本为3.16.3。 - ChumbiChubaGo
2首先需要安装OpenSSL才能使其正常工作:“sudo apt-get install libssl-dev”。 - Matt
解决方法:"无法找到CMAKE_ROOT" --> 打开新终端(source bashrc),然后运行cmake --version。 - undefined

我想听从你的建议,Wolf,但是脚本没有安装这个程序。 所以我只是创建了文件夹,但是当我执行时并没有显示已安装。
 cmake --version 

我找到了另一种更简单的方法:
sudo -E add-apt-repository -y ppa:george-edison55/cmake-3.x
sudo -E apt-get update
sudo apt-get install cmake

5我尝试了一下,它从2.x版本更新到了3.2.2版本,但是我的构建脚本仍然显示“需要CMake 3.5.1或更高版本”。是否可以指定add-apt-repository的版本为比3.x更高的版本,比如说"3.5.x"? - Timothy Swan
1仅限于版本3.5.2-2,而当前分发支持3.10.2 - Salem F