【进阶】vscode 中使用 cmake 编译调试 C++ 工程

基于 MSYS2 的 MinGW-w64 GCC 工具链与 CMake 构建系统,结合VSCode及其扩展插件( ms-vscode.cmake-tools),可实现高效的全流程C++开发调试。既可通过 VSCode 可视化界面(命令面板、状态栏按钮)便捷完成配置、编译与调试,也可借助命令行灵活控制构建过程。通过 VSCode 强大的扩展生态和智能化工具链,可视化交互、智能代码补全和AI代码生成等功能提高开发效率。

本文以第三方库(如spdlog)集成场景为例演示基本功能,通过合理的CMakeLists.txt配置,可支持复杂项目结构调试,支持断点设置与变量监视功能,实现从简单应用到模块化工程的编译调试管理,Linux+Windows 双重本地开发体验。 更多参考 《Windows 中的 Linux GCC开发工具链》《现代 CMake 实战指南:从基础到进阶》

准备

  1. 安装 MSYS2 GCC 编译工具链
  2. 安装 VSCode 及 CMake 插件
  3. 下载 spdlog 到 temp 文件夹
sh 复制代码
git clone https://github.com/gabime/spdlog.git

目标

  1. 编译 spdlog 库 并安装到指定路径
  2. 编译 spdlog 示例
  3. vscode 中打断点进行可视化调试
  4. 命令行方式实现

目录结构说明

D:/code/cpp 目录下:

sh 复制代码
├─.vscode
      └─settings.json # cmake 配置
├─build # cmake 编译生成的临时文件,可删除
├─temp # 第三方库,如 spdlog 源码
├─dist # 编译 spdlog 后安装路径
└─test # 用于 C++ 练习
    ├─helloworld
    └─spdlog # spdlog 示例
        ├─CMakeLists.txt
        └─example # spdlog 示例源码

一、可视化方式

1. 编译 spdlog 库

  1. 修改 settings.json 指定源码、编译、安装路径。
  • 等价于命令行 cmake -SD:/code/cpp/temp/spdlog -BD:/code/cpp/temp/spdlog/build

  • 通过 cmake.installPrefix 指定安装路径,等价于 cmake --install . --prefix D:/code/cpp/dist/spdlog

    json 复制代码
    	"cmake.sourceDirectory": "D:/code/cpp/temp/spdlog",
    	"cmake.buildDirectory": "D:/code/cpp/temp/spdlog/build",
    	"cmake.installPrefix": "D:/code/cpp/dist/spdlog",

重新配置 cmake,清理缓存

配置输出:

  1. 选择编译类型 --config Release
  1. 执行编译,默认生成全部目标,可点击编辑按钮修改
  1. 编译输出

2. 安装 spdlog 到 cmake.installPrefix 设置的路径 dist/spdlog

点击运行任务后的按钮,选择 cmake --> cmake 安装任务,将编译结果放到 dist/spdlog

3. 编译 spdlog example.cpp

  1. 复制 spdlog 根目录下 example 中的文件到 test/spdlog
  1. 修改 CMakeLists.txt, 指定 spdlog 库的安装路径, 让 find_package(spdlog REQUIRED) 可以找到其 cmake 依赖:
sh 复制代码
if(NOT DEFINED CMAKE_PREFIX_PATH)
    set(CMAKE_PREFIX_PATH "D:/code/cpp/dist" CACHE PATH "默认依赖路径")
endif()
  1. 修改 settings.json 指定源码路径, 刷新缓存后,点击生成按钮,默认生成到 D:/code/cpp/build/ 目录:
json 复制代码
"cmake.sourceDirectory": "D:/code/cpp/test/spdlog",

生成及调试操作按钮:

4. 可视化调试

  1. 点击源码行号添加断点
  2. 点击调试按钮开始调试, 左边可以查看调试信息、右上角有调试控制按钮,终端中可以查看输出。

二、命令行方式

  1. 打开 MSYS2 Linux 命令行环境:

    a. Ctrl + Shift + P -> Create New Terminal 选择 bash(MSYS2)

    b. 或点击终端右上角 + , 选择默认配置文件并选择,每次打开默认使用。

  2. 部分指令没有添加到系统环境变量,需要通过 绝对路径访问,也可修改添加到环境变量。可以参考前面的输出找到具体路径。

  3. cmake 命令行编译 spdlog 示例,临时添加的简单第三方库可通过该方式快速编译安装

shell 复制代码
export PATH=$PATH:/c/msys64/ucrt64/bin # 临时添加环境变量 gcc
export PATH=$PATH:/f/vs/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin # cmake
cd D:/code/cpp/test/spdlog
cmake -S. -B./build -G "MinGW Makefiles"
cmake --build ./build
# cmake --install ./build --prefix /d/code/cpp/dist/test # 支持安装到指定目录

cmake 依赖问题定位:通过 cmake -LAH 查看缓存变量,是否包含错误路径。

END

如果这篇文章对您有所帮助,欢迎点赞、分享和留言,让更多的人受益。感谢您的细心阅读,如果发现了任何错误或需要补充的地方,请随时告诉我,我会尽快处理 _

相关推荐
小邓儿◑.◑2 小时前
C++武功秘籍 | 入门知识点
开发语言·c++
杨筱毅5 小时前
【优秀三方库研读】【C++基础知识】odygrd/quill -- 折叠表达式
c++·三方库研读
hjjdebug6 小时前
c++中的enum变量 和 constexpr说明符
c++·enum·constexpr
CoderCodingNo6 小时前
【GESP】C++二级真题 luogu-B4259 [GESP202503 二级] 等差矩阵
java·c++·矩阵
明月看潮生7 小时前
青少年编程与数学 02-018 C++数据结构与算法 11课题、分治
c++·算法·青少年编程·编程与数学
聂 可 以7 小时前
IntelliJ IDEA修改实体类成员变量的名称(引入了该实体类的全部文件也会自动更新变量的名称)
java·ide·intellij-idea
Echo``7 小时前
2:QT联合HALCON编程—图像显示放大缩小
开发语言·c++·图像处理·qt·算法
MoonBit月兔8 小时前
双周报Vol.70: 运算符重载语义变化、String API 改动、IDE Markdown 格式支持优化...多项更新升级!
ide·算法·哈希算法
想睡hhh8 小时前
c++STL——stack、queue、priority_queue的模拟实现
开发语言·c++·stl
cloues break.8 小时前
C++初阶----模板初阶
java·开发语言·c++