Windows 下搭建 MSYS2+CMake+VSCode+gdb 编译调试环境

windows 下部署 vscode 的 c++ 调试环境

给raspberrylive项目写的,可能有多余步骤

安装msys2

官网下载安装包

中国大陆地区去清华镜像下载安装包和配置软件源:MSYS2 镜像使用帮助

环境变量

根据自己的安装路径修改

MSYS_DIR=C:\msys64
MINGW64_DIR=C:\msys64\mingw64
Path添加: %MSYS_DIR%\usr\bin;%MINGW64_DIR%\bin

Log

COPY

源改成国内的

参考https://mirrors.tuna.tsinghua.edu.cn/help/msys2/

装点东西

打开msys2终端

pacman -Syu
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-gdb mingw-w64-x86_64-cmake mingw-w64-x86_64-make
pacman -S mingw-w64-x86_64-toolchain
pacman -S mingw-w64-x86_64-clang
pacman -S mingw-w64-x86_64-yasm mingw-w64-x86_64-nasm
pacman -S mingw-w64-x86_64-freetype
#下面几条命令根据需求来,装自己想要的
pacman -S mingw-w64-x86_64-opencv
pacman -S mingw-w64-x86_64-ffmpeg mingw-w64-x86_64-ffms2
pacman -S mingw-w64-x86_64-libwebsockets

Bash

COPY

vscode

右击项目文件夹,使用vscode打开,或者文件打开文件夹打开项目

CMake Tools拓展

按下Ctrl+Shift+P,输入并选择C/C++: Edit Configuration

把文件内容改为如下,路径根据你msys2安装位置来

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "C:/msys64/mingw64/include"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "C:/msys64/mingw64/bin/gcc.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}

JSON

COPY

按下Ctrl+Shift+P,输入setting.json,选择工作区设置,把文件内容改为如下,路径根据你msys2安装位置来

{
    "cmake.cmakePath": "C:/msys64/mingw64/bin/cmake.exe",
    "cmake.configureOnOpen": true,
    "cmake.generator": "MSYS Makefiles",
    "C_Cpp.default.configurationProvider": "vector-of-bool.cmake-tools"
}

JSON

COPY

重启vscode,会自动启动cmake(如果没有,按下Ctrl+Shift+P,输入CMake: configure

编译器要选mingw64/bin/下的gcc

[variant] 已加载一组新变量
[kit] 已成功从 C:\Users\chenx\AppData\Local\CMakeTools\cmake-tools-kits.json 加载 9 工具包
[main] 正在配置文件夹: raspberrylive
[proc] 执行命令: D:/tools/msys2/mingw64/bin/cmake.exe --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_C_COMPILER:FILEPATH=D:\tools\msys2\mingw64\bin\gcc.exe -DCMAKE_CXX_COMPILER:FILEPATH=D:\tools\msys2\mingw64\bin\g++.exe -Hd:/projects/git/raspberrylive -Bd:/projects/git/raspberrylive/build -G "MSYS Makefiles"
[cmake] Not searching for unused variables given on the command line.
[cmake] -- The C compiler identification is GNU 10.2.0
[cmake] -- The CXX compiler identification is GNU 10.2.0
[cmake] -- Check for working C compiler: D:/tools/msys2/mingw64/bin/gcc.exe
[cmake] -- Check for working C compiler: D:/tools/msys2/mingw64/bin/gcc.exe - works
[cmake] -- Detecting C compiler ABI info
[cmake] -- Detecting C compiler ABI info - done
[cmake] -- Detecting C compile features
[cmake] -- Detecting C compile features - done
[cmake] -- Check for working CXX compiler: D:/tools/msys2/mingw64/bin/g++.exe
[cmake] -- Check for working CXX compiler: D:/tools/msys2/mingw64/bin/g++.exe - works
[cmake] -- Detecting CXX compiler ABI info
[cmake] -- Detecting CXX compiler ABI info - done
[cmake] -- Detecting CXX compile features
[cmake] -- Detecting CXX compile features - done
[cmake] -- Found OpenCV: D:/tools/msys2/mingw64 (found version "4.3.0")
[cmake] -- Found Freetype: D:/tools/msys2/mingw64/lib/libfreetype.dll.a (found version "2.10.2")
[cmake] -- Configuring done
[cmake] -- Generating done

Log

COPY

最后就能在底部状态栏上点击编译和debug按钮了

遇到的问题

cmake一直提示找不到库,cmake始终要用/usr/bin/gcc.exe而不用/mingw64/bin/gcc.exe

更改下%AppData%\..\Local\CMakeTools\cmake-tools-kits.json的内容,cmake会自动刷新

重新选上/mingw64/bin下面的gcc即可

生成后的结果参考这个(路径按自己的来)

[
  {
    "name": "GCC 10.2.0",
    "compilers": {
      "C": "C:\\msys64\\mingw64\\bin\\gcc.exe",
      "CXX": "C:\\msys64\\mingw64\\bin\\g++.exe"
    }
  },
  {
    "name": "GCC 9.3.0",
    "compilers": {
      "C": "C:\\msys64\\usr\\bin\\gcc.exe",
      "CXX": "C:\\msys64\\usr\\bin\\g++.exe"
    }
  },
  {
    "name": "GCC for x86_64-pc-msys 9.3.0",
    "compilers": {
      "C": "C:\\msys64\\usr\\bin\\x86_64-pc-msys-gcc.exe",
      "CXX": "C:\\msys64\\usr\\bin\\x86_64-pc-msys-g++.exe"
    }
  },
  {
    "name": "GCC for x86_64-w64-mingw32 10.2.0",
    "compilers": {
      "C": "C:\\msys64\\mingw64\\bin\\x86_64-w64-mingw32-gcc.exe",
      "CXX": "C:\\msys64\\mingw64\\bin\\x86_64-w64-mingw32-g++.exe"
    }
  }
]

JSON

COPY

运行raspberrylive.exe显示无法定位程序输入点inflateReset2于动态链接库

path环境变量里的优先级问题

先用下面的命令查一下dll:

C:\Users\chenx>where zlib1.dll
C:\MentorGraphics\9.5PADS\SDD_HOME\common\win32\lib\zlib1.dll
C:\Program Files\Intel\WiFi\bin\zlib1.dll
D:\tools\msys2\mingw64\bin\zlib1.dll

Cmd

COPY

可以看到优先级顺序有问题

把另两个路径改到%MINGW64_DIR%\bin后面就行了

转载保留版权:晨旭的博客 » 《Windows 下搭建 MSYS2+CMake+VSCode+gdb 编译调试环境》

### 配置 VSCode 使用 MSYS2 环境 为了在 Visual Studio Code (VSCode) 中成功配置并使用 MSYS2 环境,需要完成以下几个方面的设置: #### 1. 安装必要的软件和工具 确保已经安装了以下组件: - **MSYS2**:可以从其官网获取最新版本,并按照官方指南进行初始化更新[^3]。 - **Visual Studio Code**:下载并安装适合您系统的版本。 #### 2. 设置环境变量 将 MSYS2 的路径添加到系统的 `PATH` 环境变量中。这一步非常重要,因为许多工具依赖于能够通过命令行访问这些二进制文件。例如,在 Windows 上,假设 MSYS2 被安装到了 `D:\msys64`,则应将此路径加入系统环境变量。 #### 3. 修改 VSCode 终端配置 为了让 VSCode 默认打开的是 MSYS2 提供的终端而不是 PowerShell 或 CMD,默认控制台需被更改。具体方法是在 `.vscode/settings.json` 文件中定义集成终端的行为: ```json { "terminal.integrated.defaultProfile.windows": "msys2", "terminal.integrated.profiles.windows": { "msys2": { "path": "D:\\msys64\\ucrt64.exe", "args": [] } } } ``` 上述 JSON 片段指定了当用户启动一个新的内置终端时,它会运行位于指定位置的 UCRT64 子系统实例作为基础 shell[^2]。 #### 4. 创建 CMake 工具链文件 如果项目涉及跨平台构建或者特定编译器需求,则可能还需要创建自定义 CMake 工具链文件来指示 CMake 如何找到正确的编译器和其他开发资源。通常情况下,这样的文件会被命名为类似于 `Toolchain-mingw.cmake` 并放置在一个合适的位置以便引用。 #### 5. 配置调试支持 对于希望能够在 VSCode 内部直接执行断点调试的情况,必须正确填写项目的 launch configuration (`launch.json`) 来匹配实际使用的编译方式以及目标可执行文件所在位置。下面给出了一种典型的模板结构用于基于 GDB 进行本地源码级调试的例子: ```json { "version": "0.2.0", "configurations": [ { "name": "(GDB) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/app.exe", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "externalConsole": true, "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "Build" } ] } ``` 这里特别注意 `"miDebuggerPath"` 字段指向了 GNU Debugger(GDB),这是由 MinGW-w64 提供的标准调试解决方案之一;另外还设定了预启动任务 `"preLaunchTask":"Build"` ,意味着每次触发该配置前都会先尝试调用关联的任务去重新生成最新的产物再加载入内存当中予以测试验证。 --- ### 总结 综上所述,要让 VSCode 正常运作于 MSYS2 下面主要分为几个部分来进行调整优化——从全局层面着手修改操作系统级别的参数设定比如追加 PATH 值进去方便后续调用外部指令集;再到局部范围内的编辑器内部偏好选项定制化处理诸如切换默认 Shell 类型或是引入额外插件辅助解析语法高亮显示等功能特性等等不一而足。最终目的是达成无缝衔接两者之间协作关系从而提升整体工作效率水平。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值