安装 CMake
你的 CMake 版本应该比你的编译器要更新,它应该比你使用的所有库(尤其是 Boost)都要更新。新版本对任何一个人来说都是有好处的。
如果你拥有一个 CMake 的内置副本,这对你的系统来说并不特殊。你可以在系统层面或用户层面轻松地安装一个新的来代替它。如果你的用户抱怨 CMake 的要求被设置得太高,请随时使用这里的内容来指导他们。尤其是当他们想要 3.1 版本以上,甚至是 3.21 以上版本的时候......
快速一览(下面有关于每种方法的更多信息)
按作者的偏好排序:
- 所有系统
- Pip (官方的,有时会稍有延迟)
- Anaconda / Conda-Forge
- Windows
- Chocolatey
- Scoop
- MSYS2
- Download binary (官方的)
- macOS
- Homebrew
- MacPorts
- Download binary (官方的)
- Linux
- Snapcraft (官方的)
- APT repository (仅适用于Ubuntu/Debian) (官方的)
- Download binary (官方的)
官方安装包
你可以从 KitWare 上下载 CMake。如果你是在 Windows 上,这可能就是你获得 CMake 的方式。在 macOS 上获得它的方法也不错(而且开发者还提供了支持 Intel 和 Apple Silicon 的 Universal2 版本),但如果你使用 Homebrew 的话,使用brew install cmake
会带来更好的效果(你应该这样做;苹果甚至支持 Homebrew,比如在 Apple Silicon 的推出期间)。你也可以在大多数的其他软件包管理器上得到它,比如 Windows 的 Chocolatey 或 macOS 的 MacPorts 。
在 Linux 上,有几种选择。Kitware 提供了一个 Debian/Ubunutu apt 软件库,以及 snap 软件包。官方同时提供了 Linux 的二进制文件包,但需要你去选择一个安装位置。如果你已经使用~/.local
存放用户空间的软件包,下面的单行命令1将为你安装 CMake2。
~ $ wget -qO- "https://cmake.org/files/v3.21/cmake-3.21.0-linux-x86_64.tar.gz" | tar --strip-components=1 -xz -C ~/.local
上面的名字在 3.21 版本中发生了改变:在旧版本中,包名是cmake-3.19.7-Linux-x86_64.tar.gz
。如果你只是想要一个仅有 CMake 的本地文件夹:
~ $ mkdir -p cmake-3.21 && wget -qO- "https://cmake.org/files/v3.21/cmake-3.21.0-linux-x86_64.tar.gz" | tar --strip-components=1 -xz -C cmake-3.21 ~ $ export PATH=`pwd`/cmake-3.21/bin:$PATH
显然,你要在每次启动新终端都追加一遍 PATH,或将该指令添加到你的.bashrc
或 LMod 系统中。
而且,如果你想进行系统安装,请安装到/usr/local
;这在 Docker 容器中是一个很好的选择,例如在 GitLab CI 中。请不要在非容器化的系统上尝试。
docker $ wget -qO- "https://cmake.org/files/v3.21/cmake-3.21.0-linux-x86_64.tar.gz" | tar --strip-components=1 -xz -C /usr/local
如果你在一个没有 wget 的系统上,请使用curl -s
代替wget -qO-
。
你也可以在任何系统上构建 CMake,这很容易,但使用二进制文件通常是更快的。
CMake 默认版本
下面是一些常见的构建环境和你会在上面发现的 CMake 版本。请自行安装 CMake,它只有 1-2 行,而且内置的版本没有什么 "特殊 "之处。它们通常也是向后兼容的。
Windows
另外 Scoop 一般也是最新的。来自 CMake.org 的普通安装程序在 Windows 系统上通常也很常见。
macOS
至少根据 Google Trends 的调查,如今 Homebrew 在 macOS 上的流行程度是相当高的。
Linux
RHEL/CentOS
CentOS 8 上的默认安装包不算太差,但最好不要使用 CentOS 7 上的默认安装包。请使用 EPEL 包来代替它。
Ubuntu
你应该只在 18.04 以上的版本使用默认的 CMake;它是一个 LTS 版本,并且有一个相当不错的最低版本!
Debian
其它 Linux 发行版
常用工具
在许多系统上只需pip install cmake
。如果需要的话,请添加--user
(如果需要的话,modern pip 会为你做好这个)。然而它目前还没有提供 Universal2 的轮子(wheels)。
CI
分布情况 | CMake 版本 | 说明 |
---|---|---|
TravisCI Xenial | 3.12.4 | 2018 年 11 月中旬,这一映像已准备好广泛使用 |
TravisCI Bionic | 3.12.4 | 目前与 Xenial 一样 |
Azure DevOps 18.04 | 3.17.0 | |
GitHub Actions 18.04 | 3.17.0 | 大部分与 Azure DevOps 保持同步 |
GitHub Actions 20.04 | 3.17.0 | 大部分与 Azure DevOps 保持同步 |
如果你在使用 GitHub Actions,也可以查看 jwlawson/actions-setup-cmake 进行操作,它可以安装你选择的 CMake,即使是在 docker 中也可以操作运行。
完整列表
小于 3.10 的版本用更深的红色标记。
也可参见 pkgs.org/download/cmake。
Pip
这也是一个官方软件包,由 CMake 作者在 KitWare 进行维护。这是一种相当新的方法,在某些系统上可能会失败(在我最后一次检查时,Alpine 还不被支持,但它有当时最新的 CMake),但它工作的效果非常好(例如在 Travis CI 上)。如果你安装了 pip(Python 的软件包安装程序),你可以这样做:
gitbook $ pip install cmake
只要你的系统中存在二进制文件,你便可以立即启动并运行它。如果二进制文件不存在,它将尝试使用 KitWare 的scikit-build
包来进行构建。目前它还无法在软件包系统中作为依赖项,甚至可能需要(较早的)CMake 副本来构建。因此,只有在二进制文件存在的情况下我们才能使用这种方式,大多数情况下都是这样的。
这样做的好处是能遵从你当前的虚拟环境。然而,当它被放置在pyproject.toml
文件中时,它才真正发挥了作用--它只会被安装到构建你的软件包中,而不会在之后保留下来!这简直太棒了。
就我个人而言,在 Linux 上时,我会把 CMake 的版本放入文件夹名中,比如/opt/cmake312
或~/opt/cmake312
,然后再把它们添加到 [LMod][]。参见envmodule_setup
,它可以帮助你在 macOS 或 Linux 上设置 LMod 系统。这需要花点时间来学习,但这是管理软件包和编译器版本的一个好方法。
1. 我想这是显而易见的,但你现在正在下载和运行代码,这会使你暴露在其他人的攻击之下。如果你是在一个重要的环境中,你应该下载文件并检查校验码。(注意,简单地分两步做并不能使你更安全,只有校验和码更安全) ↩
2. 如果你的主目录中没有.local
,想要开始也很容易。只要建立这个文件夹,然后把export PATH="$HOME/.local/bin:$PATH"
添加到你的.bashrc
或.bash_profile
或.profile
文件中。现在你可以把你构建的任何软件包安装到-DCMAKE_INSTALL_PREFIX=~/.local
而不是/usr/local
! ↩