现代 C++ 实战(00):环境搭建与项目导览
学现代 C++,最怕的不是语法多,而是 demo 跑不起来、编译器版本对不上、CMake 报错看不懂。这一篇我们不讲任何语言特性,只把「能编译、能运行、知道 39 个 demo 在哪」这件事搞定。后面 27 篇会在这个环境里,逐个拆解 C++11 到 C++23 的核心特性。
这是「现代 C++ 实战」系列的第 0 篇。本系列基于
ref/cpp_demo的 39 个独立 CMake 项目,在 Docker 或 macOS 本地编译运行。下一篇我们从 CMake 与现代构建说起,搞懂 FetchContent 依赖管理。
一、为什么这样学?
你可能已经会写 C++,但面对 C++11 之后的「现代 C++」,往往有这样的困惑:特性太多、标准迭代太快、书和博客各说各话。本系列的选择很克制:
| 选择 | 原因 |
|---|---|
| Demo 驱动 | 每个知识点对应可编译、可运行的代码,不是纸上谈兵 |
| 39 个独立项目 | 每个子目录自包含,可单独拷贝到其他机器 |
| 统一 build.sh | 所有 demo 同一套构建命令,降低切换成本 |
| Docker + macOS 双环境 | 容器保证 Linux 一致性,本地 Apple Clang 也支持 |
| C++11→23 递进 | 按标准版本组织,不跳步 |
可以把它想成学开车:我们先找一条封闭赛道(统一工具链),车况一致(CMake 3.14+),专心练操作,而不是先纠结「我这辆车该加几号油」。
二、项目全景
示例代码在本地 ref/cpp_demo 目录(与博客同工作区)。8 大分类、39 个独立 CMake 项目:
1 | ref/cpp_demo/ |
每个子目录都是独立自包含的项目,标准结构如下:
1 | <项目目录>/ |
三、统一构建方式
所有 demo 遵循同一套构建命令,进入任意项目目录即可:
1 | cd ref/cpp_demo/basics/lambda_demo # 任选一个 demo |
build.sh 会自动完成:创建 build/ 目录 → 运行 CMake 配置 → 并行编译 → 可选运行。首次编译时还会把 compile_commands.json 链接到项目根目录,方便 clangd 识别头文件。
快速验证
选最简单的 demo 跑一遍,确认环境没问题:
1 | cd ref/cpp_demo/basics/lambda_demo |
如果终端输出了 Lambda 相关的演示结果,说明 CMake + 编译器链路已经通了。
四、Docker 环境
跨平台一致性靠 Docker。根目录的 run_as_cpp_docker.sh 会启动预配置的 Ubuntu 容器:
1 | cd ref/cpp_demo |
容器基于 Ubuntu 22.04 开发镜像,预装 GCC、Clang、CMake 等工具链。镜像名可在 run_as_cpp_docker.sh 中自行配置。进入容器后,工作目录挂载到 /workspace,你可以在里面编译任意 demo。
注意:脚本中的 volume 挂载路径需改成你本机
ref/cpp_demo的实际绝对路径,例如:
1 -v /path/to/ref/cpp_demo:/workspace
五、macOS 本地编译
不想开 Docker 也可以直接在 macOS 上编译。要求:
| 项目 | 说明 |
|---|---|
| Apple Clang | Xcode Command Line Tools,建议 14+ |
| CMake | 3.14 及以上 |
| C++ 标准 | 各 demo 标注了所需标准(C++11 ~ C++23) |
常见坑:
- C++20/23 demo 编译失败:确认
cmake -DCMAKE_CXX_STANDARD=20或 23,且 Clang 版本足够新 - WebSocket demo:依赖系统 Boost,需
brew install boost - SQLite demo:依赖 pkg-config 和 sqlite3 开发库
大部分 basics/ 和 algorithms/ 下的 demo 在 macOS 上可以直接 ./build.sh --run,无需额外依赖。
六、IDE 配置速览
用 Cursor / VS Code 写 C++ 时,第三方库头文件可能报红(FetchContent 下载的依赖在 build/_deps/ 下)。解决办法:
- 先
./build.sh编译一次,生成build/compile_commands.json build.sh会自动链接到项目根目录- clangd 读取该文件,获得正确的头文件搜索路径
详细步骤见 ref/cpp_demo/docs/CPP_IDE_SETUP.md。记住一点:IDE 报红不代表编译失败,以 ./build.sh 的结果为准。
七、28 篇学习路线
本系列共 28 篇,分五季发布:
| 季 | 篇号 | 主题 | 篇数 |
|---|---|---|---|
| 第零季 | 00–02 | 环境与基础 | 3 |
| 第一季 | 03–11 | 现代 C++ 核心特性 | 9 |
| 第二季 | 12–17 | 并发与工程实践 | 6 |
| 第三季 | 18–23 | 算法与数据结构 | 6 |
| 第四季 | 24–27 | 网络、数据库与进阶项目 | 4 |
前几篇的路线图:
| 篇号 | 标题 | 对应 demo |
|---|---|---|
| 00 | 环境搭建与项目导览 | 本篇 |
| 01 | CMake 与现代构建 | projects/fetch_content/ |
| 02 | C++ 版本演进一览 | basics/version_features/ |
| 03 | 移动语义与右值引用 | basics/right_ref_demo/ |
| 04 | 智能指针(上) | smart_pointers/ 01–04 |
| … | … | … |
完整大纲见工作区 docs/CPP_SERIES_OUTLINE.md。
八、常用命令备忘
1 | # 进入任意 demo 编译运行 |
九、小结
本篇完成了系列的地基:项目全景、统一构建、Docker / macOS 双环境、IDE 配置要点。你不需要记住 39 个 demo 的细节,只要确认 ./build.sh --run 能跑通一个 demo 就行。
现代 C++ 实战系列第 0 篇完。下一篇我们讲 CMake 与现代构建——搞懂 FetchContent,后面所有带第三方依赖的 demo 都不怕。










