手建的 CMake 项目在 VS2022「打开文件夹」模式下的打开方式、自动生成的配置、断点调试与 launch.vs.json。核心结论:CMake 项目的调试体验与向导项目基本一致,唯一多出的一步是手动选启动目标。
一、怎么用 VS 打开手建的 CMake 项目
步骤:
- VS2022 → 文件 → 打开 → 文件夹。
- 选项目根目录,比如
<项目根目录>\MyProject。 - VS 自动识别
CMakeLists.txt,切换到 CMake 项目模式。
VS 会自动做的事:
- 读
CMakeLists.txt,配置 CMake。 - 在项目根目录生成
.vs/,存 VS 自己的状态。 - 在
out/build/下生成构建产物。 - 底部状态栏出现 配置选择器(Debug/Release),和 CMake 目标选择器。
和向导项目一样,VS 该自动生成的还是会生成。
二、VS 自动生成的配置有哪些
和向导项目时一样:
.vs/:VS 的工作状态、索引、窗口布局。不提交 Git。out/:CMake 构建产物。不提交 Git。CMakeUserPresets.json:如果在 VS 里改过预设,它可能生成这个。不提交 Git。
这些不影响项目结构本身,只是 VS 的本地缓存,删了能重建。
三、断点怎么用
CMake 项目的断点和向导项目完全一样。
基本流程
- 在代码行号左边点一下,出现红点,就是断点。
- 按 F5 启动调试(不是 Ctrl+F5,Ctrl+F5 是不调试直接运行)。
- 程序运行到断点处停下,VS 自动切换到调试界面。
- 底部出现调试工具栏:继续、单步跳过、单步进入、跳出。
- 左侧或底部窗口:局部变量、监视、调用栈、断点列表。
常用快捷键
| 操作 | 快捷键 |
|---|---|
| 启动调试 | F5 |
| 停止调试 | Shift + F5 |
| 单步跳过(不进入函数) | F10 |
| 单步进入(进入函数) | F11 |
| 跳出当前函数 | Shift + F11 |
| 继续运行 | F5 |
| 切换断点 | F9 |
| 条件断点 | 右键断点 → 条件 |
CMake 项目特有的注意点
1. 启动目标
VS 需要知道调试哪个可执行文件。CMake 项目里:
- 在顶部工具栏的启动项下拉框里,选目标可执行文件,比如
MyProject.exe。 - 如果下拉框是空的,说明 CMake 还没配置成功,看底部 CMake 输出窗口有没有报错。
2. 调试配置
- Debug 配置才能断点调试,Release 优化后断点可能不准。
- VS 顶部工具栏切到 Debug。
3. 工作目录
如果程序需要读文件,默认工作目录是构建目录。可以配 launch.vs.json 里的 currentDir(见第五节)。
待核实:「打开文件夹」模式下调试设置的实际菜单入口(「项目 → 调试和启动设置」还是「调试」菜单下),请按本机 VS2022 版本核实。
如果断点不生效
常见原因:
- 配置是 Release:切到 Debug。
- 没选对启动目标:顶部下拉框选目标 exe。
- 代码没重新编译:改完代码要重新构建再 F5。
- CMake 配置失败:看底部「CMake」输出窗口的报错。
四、CMake 项目和向导项目的调试差异
| 向导项目 | CMake 项目 | |
|---|---|---|
| 断点 | 完全一样 | 完全一样 |
| F5/F10/F11 | 一样 | 一样 |
| 变量监视 | 一样 | 一样 |
| 调用栈 | 一样 | 一样 |
| 启动目标选择 | 自动 | 顶部下拉框手动选 |
| 工作目录配置 | 项目属性页 | launch.vs.json |
唯一需要适应的是「启动目标选择」,其他调试体验完全一致。
五、launch.vs.json 是什么
CMake 项目里,如果默认工作目录不对,或者要传命令行参数,可以建 launch.vs.json:
{
"version": "0.2.1",
"defaults": {},
"configurations": [
{
"type": "default",
"project": "CMakeLists.txt",
"projectTarget": "MyProject.exe",
"name": "MyProject.exe",
"currentDir": "${workspaceRoot}/resources",
"args": ["--debug"]
}
]
}
projectTarget:调试哪个 exe。currentDir:工作目录。args:命令行参数。
这个文件可以提交 Git,团队共用调试配置。
待核实:VS 默认把
launch.vs.json生成在项目根.vs/目录下,而项目.gitignore约定忽略整个.vs/。若要真正入库共用,需核实该文件的存放位置,以及是否需要.gitignore加例外(如!.vs/launch.vs.json)。
六、核心结论
- VS 打开 CMake 项目,体验和向导项目几乎一样,该有的调试功能全有。
- 断点、单步、变量监视、调用栈,完全一致。
- VS 该生成的
.vs/、out/照样生成,不影响项目结构。 - 唯一多一步:顶部下拉框选启动目标。
不需要为了调试方便而回到向导项目。 CMake 项目的调试体验,配好 launch.vs.json 后,和向导项目没有区别。
七、实操建议
- 先建一个最小 CMake 项目,用 VS 打开,练习断点调试。
- 建
launch.vs.json,配好启动目标和工作目录。 - 把
.vs/、out/、CMakeUserPresets.json加进.gitignore。 - 熟悉顶部工具栏的配置和目标下拉框。
实际跑通一次即可验证:CMake 项目的调试和向导项目没有本质区别。
八、总结
VS 对 CMake 项目的支持已经很成熟,断点调试和向导项目一样用——只需适应「手动选启动目标」这一步,其余照旧。
豫公网安备41108202000982号