手建的 CMake 项目在 VS2022「打开文件夹」模式下的打开方式、自动生成的配置、断点调试与 launch.vs.json。核心结论:CMake 项目的调试体验与向导项目基本一致,唯一多出的一步是手动选启动目标。

一、怎么用 VS 打开手建的 CMake 项目

步骤:

  1. VS2022 → 文件 → 打开 → 文件夹。
  2. 选项目根目录,比如 <项目根目录>\MyProject。
  3. 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 项目的断点和向导项目完全一样。

基本流程

  1. 在代码行号左边点一下,出现红点,就是断点。
  2. 按 F5 启动调试(不是 Ctrl+F5,Ctrl+F5 是不调试直接运行)。
  3. 程序运行到断点处停下,VS 自动切换到调试界面。
  4. 底部出现调试工具栏:继续、单步跳过、单步进入、跳出。
  5. 左侧或底部窗口:局部变量、监视、调用栈、断点列表。

常用快捷键

操作快捷键
启动调试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 版本核实。

如果断点不生效

常见原因:

  1. 配置是 Release:切到 Debug。
  2. 没选对启动目标:顶部下拉框选目标 exe。
  3. 代码没重新编译:改完代码要重新构建再 F5。
  4. 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 后,和向导项目没有区别。

七、实操建议

  1. 先建一个最小 CMake 项目,用 VS 打开,练习断点调试。
  2. 建 launch.vs.json,配好启动目标和工作目录。
  3. 把 .vs/、out/、CMakeUserPresets.json 加进 .gitignore。
  4. 熟悉顶部工具栏的配置和目标下拉框。

实际跑通一次即可验证:CMake 项目的调试和向导项目没有本质区别。

八、总结

VS 对 CMake 项目的支持已经很成熟,断点调试和向导项目一样用——只需适应「手动选启动目标」这一步,其余照旧。