真正使用 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、多编译器版本混用),适合大型项目或需要精细控制依赖的场景。 我没用过