真正使用 C++ 前,先对 C++ 生态有了解吧。

——可以说是四分五裂群雄割据的环境。

语言标准

超级石山。

标准很好理解,因为 C++ 只有一套 ISO 制定的语言标准,有所差别的只是时间上不同版本差别,而且从名字上很好看出来。

常见的标准比如说 C++11/14/17/20/23 等。每个版本不仅新增特性,还修正旧有不足。

此外,不同标准通常也体现出了不同的代码风格,比如说早期的 C++ 写起来会看着像 C 。

编译器

以为 .NET 生态已经很乱了,没想到 C++ 的更乱,不过超级老资历嘛,可以理解。

编译器是 C++ 标准的实现,也就是将标准 C++ 及编译器扩展的语法(比如说#pragma once,或者__declspec)进行编译,成为汇编代码。

主要流行的 C++ 编译器有三种:

  • GCC:GNU 主流编译器,自由、开源软件,跨平台能力强。
  • Clang/LLVM:同样是开源的编译器,在 macOS/iOS 开发和工具链方面流行。
  • MSVC:Windows 的主流编译器,和 Visual Studio 紧密集成。

不同编译器对 C++ 最新标准支持程度不同,并且会对代码给不同的警告和错误。

如果没搞错的话,不同编译器编译出来的二进制是 ABI 不兼容的,但是我没测试。

构建系统

构建系统主管如何构建代码,也就是怎么进行编译,怎么处理外部库、多文件、跨平台的编译。

以前有更早的构建系统例如 makefile,还有特定平台的 .vcproj.vcxproj

常见的构建系统有这几种:

  • Make:通过 makefile 进行构建的有年代感的构建系统。古代构建系统
  • CMake:现代的跨平台的构建系统。通过生成不同平台的 C++ 项目文件来达到跨平台构建。
  • MSBuild:微软主流的构建平台,也是大多数 Visual Studio 中 .NET 和 C++ 项目构建用的构建系统。

库管理器

现在,直面真正的混沌。

没有 C++ 规定或者社区统一作为中心的库管理工具,自己选吧。

一般安装库有几种办法:

  • 古法:手动下载源代码、编译,并配置到构建系统中参与构建。
  • 现代科技:使用现代化的工具进行库管理。
  • 邪修禁术:使用 linux 包管理 apt yum pacman 之类的东西装库,但是不建议这么做。

不过常见的几种现代主流库管理工具还是有的:

  • vcpkg:微软维护的库管理工具。适合 Windows 用户或希望“一键集成 CMake”的场景,manifest 模式能锁定依赖版本,接近「开箱即用」。 有集成还是挺省事的
  • Conan:更灵活,支持自定义包仓库、复杂配置矩阵(如多 ABI、多编译器版本混用),适合大型项目或需要精细控制依赖的场景。 我没用过