跳至内容
Topos Uranos

在 Windows、macOS 和 Linux 上安装环境

摘要

本课安装并检验整个课程所用的环境。它先说明安装什么以及为什么:一个编译器,它是一个独立的程序;一个编辑器,即调用编译器的 Visual Studio Code;编辑器的官方 C++ 扩展;以及终端,从终端可以不经中介地调用编译器。随后为每个系统提供完整的指南:在 Windows 上,使用 MSYS2 及其 UCRT64 环境和 GCC,或者以微软的编译器作为替代;在 macOS 上,使用 Xcode 命令行工具及其中的 Clang,如果苹果的版本不够,则使用 Homebrew 的 GCC;在 Linux 上,使用发行版自带的 GCC,涵盖 Debian 和 Ubuntu、Fedora 以及 Arch。接着是编辑器及其扩展的安装(三个系统完全相同),以及 Windows 控制台的配置,使其以 UTF-8 写出和读取文本。最后是一个检验程序,它写出一行中文和编译器所采用的 C++ 标准;还有安装中的常见故障,每一种都附有原因和解决办法。

学习目标

  1. 在自己的系统上安装支持 C++23 的编译器,并在终端中查看其版本。
  2. 安装 Visual Studio Code 及其官方 C++ 扩展,并用它打开一个工作目录。
  3. 从终端和从编辑器两种途径编译并运行第一个检验程序。
  4. 诊断并解决至少三种安装中的常见故障(找不到编译器、版本过旧、不识别标准)。

安装什么,为什么

在程序、编译器与 C++一课中我们看到,用 C++ 写成的程序不能照原样运行:编译器把它翻译成可执行文件,即一个包含机器指令、操作系统能够启动的文件。如果是这样,编程至少需要两样不同的东西:一个书写程序文本的地方,以及一个把文本转换为可执行文件的翻译者。前者由编辑器提供;后者由编译器提供。它们是彼此独立的程序,分别安装,也可能分别出故障,不应混为一谈:编辑器本身什么也不编译,它只是请编译器去编译,并把编译器的回答显示出来。

这种分离有一个实际后果,本课的所有指南都依赖于它。编辑器在“编译”时,实际上是在终端中写下一条像 g++ main.cpp -o main 这样的命令,与学习者自己可以写下的完全一样。由此可知,编辑器所做的一切也都可以在终端中手工完成,终端是向操作系统输入命令的文本窗口;而且,如果编辑器出了故障,借助终端可以查明缺陷是在编辑器中还是在编译器中。因此,本课程从第一天起就同时使用两者:编辑器图其方便,终端用来弄清发生了什么。

需要安装的部件有四个。

  • 编译器,连同它的标准库。本课程使用 C++23 标准,因此编译器必须识别它,其标准库也必须包含头文件 <print>,它提供 std::println。在 Windows 和 Linux 上使用 GCC(其 C++ 命令是 g++),在 macOS 上使用 Clang(clang++)。需要 GCC 15 或更高版本:头文件 <print> 在 14 版时进入 GCC 的标准库,但用 std::println 写出整个容器的功能,本课程从程序、编译器与 C++一课起、并在后面许多课中都会用到,直到 15 版才具备。在 macOS 上,需要 Xcode 16 或更高版本的工具。
  • 编辑器:Visual Studio Code,免费,在三个系统上是同一个程序,因此本课程的说明对所有系统都适用。
  • 微软官方的 C/C++ 扩展,用于 Visual Studio Code,它让编辑器懂得这门语言:为代码着色,在输入时标出错误,补全名称,并且知道如何调用编译器和调试器。
  • 调试器,在 Windows 和 Linux 上是 GDB,在 macOS 上是 LLDB:一个可以暂停运行并查看程序状态的程序。它现在随编译器一起安装,从第 4 单元起使用。

下面的各份指南彼此独立:每位学习者按照自己系统的那一份操作,然后跳到关于 Visual Studio Code 的部分。在命令块中,行首的符号 $ 代表终端的提示符,不需要输入;没有这个符号的行是终端的回应。文中引用的官方网站是唯一值得从中下载的地方:从别处得到的安装程序可能已经过时,或者被篡改过。