安装 CMake

你的 CMake 版本应该比你的编译器要更新,它应该比你使用的所有库(尤其是 Boost)都要更新。新版本对任何一个人来说都是有好处的。

如果你拥有一个 CMake 的内置副本,这对你的系统来说并不特殊。你可以在系统层面或用户层面轻松地安装一个新的来代替它。如果你的用户抱怨 CMake 的要求被设置得太高,请随时使用这里的内容来指导他们。尤其是当他们想要 3.1 版本以上,甚至是 3.21 以上版本的时候......

快速一览(下面有关于每种方法的更多信息)

按作者的偏好排序:

官方安装包

你可以从 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,或将该指令添加到你的.bashrcLMod 系统中。

而且,如果你想进行系统安装,请安装到/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

Chocolatey package MSYS2 mingw package MSYS2 msys2 package

另外 Scoop 一般也是最新的。来自 CMake.org 的普通安装程序在 Windows 系统上通常也很常见。

macOS

Homebrew package Homebrew Casks package MacPorts package

至少根据 Google Trends 的调查,如今 Homebrew 在 macOS 上的流行程度是相当高的。

Linux

RHEL/CentOS

CentOS 7 package CentOS 8 package EPEL 7 package

CentOS 8 上的默认安装包不算太差,但最好不要使用 CentOS 7 上的默认安装包。请使用 EPEL 包来代替它。

Ubuntu

Ubuntu 14.04 package Ubuntu 16.04 package Ubuntu 18.04 package Ubuntu 20.04 package Ubuntu 22.04 package

你应该只在 18.04 以上的版本使用默认的 CMake;它是一个 LTS 版本,并且有一个相当不错的最低版本!

Debian

Debian 10 package Debian 10 backports package Debian 11 package Debian 11 backports package Debian Unstable package

其它 Linux 发行版

Alpine Linux 3.15 package Arch package Fedora 35 package FreeBSD port OpenBSD port Gentoo package openSUSE Tumbleweed package Homebrew package

常用工具

ConanCenter package PyPI Conda-forge Anaconda

在许多系统上只需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 的版本用更深的红色标记。

Full listing

也可参见 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!

results matching ""

    No results matching ""