跳到正文

Wiki

C++开发环境搭建与测试

约 5 分钟阅读

这一章先不改代码,只做一件很具体的事:

在你的电脑上把我准备好的 CMake 模板跑起来。

本教程使用同一套 C++ 示例,Linux 和 Windows 只是准备工具、选择构建预设和运行程序的路径不同。如果你刚开始学 C++,看到 CMake、Ninja、target_link_libraries 这些名字不用紧张,先按照自己系统对应的步骤把工程跑通。

1.先选择你的系统

你使用的系统 从这里开始
Ubuntu / Debian、Fedora 等 Linux Linux开发环境搭建与测试
Windows 10 / 11,64 位电脑 Windows开发环境搭建与测试

Linux 使用 GCC;Windows 使用 GCC / MinGW-w64,推荐通过 MSYS2 UCRT64 安装。Windows 也可以使用已经单独安装好的 MinGW-w64、CMake、Ninja 和 Eigen,具体配置放在 Windows 子节里。

C/C++ 基础、现代 C++ 和通用 CMake 工程可以使用 Linux 或 Windows 学习。进入后面的 Boost.Asio、串口、TCP/UDP 通信和机器人实践时,请准备好 Linux 环境,这部分教程统一按 Linux 的操作步骤讲解。

这一章只关心两件事:

  1. 你的电脑能不能编译并运行 C++ 工程。
  2. VSCode 能不能对这个工程下断点并进入调试。

完整 CMake 模板详解放在后面的 CMake工程模板。现在不要求你理解全部构建原理,等学到分文件编写、库和工程组织时再回来看。

2.本章最终效果

做完对应系统的子节后,你会得到一个名为 hello_cpp 的文件夹,里面是完整的 CMake 模板工程。

原样运行模板时,输出类似:

[lib1] Vector v = 1 2 3
[lib1] Norm = 3.74166
[lib2] Matrix m =
1 2
3 4
[lib2] Determinant = -2

注意:hello_cpp 是 clone 下来的文件夹名,cmake_template 是工程当前生成的程序名,它们不是一回事。

先认识几个名字:

名字 先这样理解
g++ 真正编译 C++ 代码的编译器
CMake 读取 CMakeLists.txt,生成构建规则
Ninja 按照 CMake 生成的规则执行编译
GDB 调试器,查看断点、变量和调用栈时会用到
Eigen 模板原始示例使用的线性代数库,主要以头文件形式使用
lib1 / lib2 模板自带的两个示例小库,本章先不改它们

3.后面章节的运行约定

完成环境搭建后,前期练习通常只需要修改:

src/main.cpp

然后在项目根目录重新构建、运行。根据自己的系统选择命令。

Linux:

cmake --build --preset linux-debug
./build/linux-debug/src/cmake_template

Windows,PowerShell:

cmake --build --preset windows-debug
./build/windows-debug/bin/cmake_template.exe

也可以直接使用 VSCode CMake Tools 的 Build、Launch 和 Debug 按钮。两个系统的操作顺序相同,选择的 preset 分别是 linux-debug、windows-debug。

用途 Linux Windows
Debug 预设 linux-debug windows-debug
Release 预设 linux-release windows-release
Debug 构建目录 build/linux-debug build/windows-debug
日常运行的程序 build/linux-debug/src/cmake_template build/windows-debug/bin/cmake_template.exe
安装后的程序 install/linux-debug/bin/cmake_template install/windows-debug/bin/cmake_template.exe

日常练习直接运行 build 目录中的程序即可,只有验证安装和分发时才需要 install。

4.安装 VSCode 扩展

两种系统都使用 VSCode。扩展分工如下,具体安装和配置步骤见对应系统的子节:

扩展 作用
CMake Tools 识别 preset,配置、构建、选择 target,运行和调试工程
C/C++ 提供 GDB 等调试器的接入,也可以提供 IntelliSense
C/C++ DevTools 按需要使用的辅助扩展
clangd 根据 compile_commands.json 提供代码补全、跳转和诊断

如果用 clangd 做代码分析,可以保留 C/C++ 的调试功能,同时关闭它的 IntelliSense,避免两套代码提示重复。clangd 扩展还需要电脑上有 clangd 程序,这部分也在系统子节中说明。

5.下一步学什么

先完成自己系统的环境搭建,再进入 C++基础初识。后面的语法、类、STL 和现代 C++ 示例共用同一份讲解,遇到系统差异时会在对应位置补充。