C++ 开发 + VSCode 调试
- MSYS2 安装 gcc、make
- 下载
- 安装
- MSMYS2
- pacman 添加镜像源
- GCC
- 1. 安装
- 2. 查看结果
- 3. 环境变量
- GDB
- VSCode 调试
- 所需插件
- 创建项目
- 调试代码
- 1. tasks.json 配置任务
- 2. launch.json 配置调试
- 3. 运行
- 更进一步的 C/C++ 设置
- 参考资料
MSYS2 安装 gcc、make
下载
官方下载
清华大学开源软件镜像站:MSYS2 软件仓库
安装
- MSYS2:
- 主要功能是提供一个在Windows操作系统上模拟类Unix环境的开发和构建工具集。它提供了一个模拟POSIX系统的命令行接口和包管理器(Pacman)。
- MSYS2基于Cygwin技术,但它更专注于构建原生Windows应用程序。
- 它的目标是创建一个易于使用的开发平台,使得开发者能够在Windows上编译和运行那些原本在Unix/Linux环境下开发的开源软件。
- MinGW-w64:
- 是一个项目,其目的是为Windows提供GCC(GNU Compiler Collection)和其他工具链的移植版本,以便能够直接生成64位或32位Windows原生可执行文件,无需依赖Cygwin或其他兼容层。
- MinGW-w64支持现代Windows特性,并解决了早期MinGW在64位系统支持上的局限性。
- 两者的关系:
- MSYS2 集成了 MinGW-w64 工具链,使得用户可以通过简单的命令行操作安装和使用 GCC 编译器来编译 Windows 原生程序。
- 使用 MSYS2 的开发者可以利用其提供的包管理系统快速获取并更新 MinGW-w64 等工具链及相关库文件,简化了Windows下的跨平台开发流程。
MSMYS2
下载后直接运行安装即可,我装在: D:\msys64
安装好后,出现多个快捷方式,下表简单是介绍
快捷方式 | 描述 |
---|---|
MSYS2 CLANG64 | 使用Clang编译器的64位版本环境,提供基于LLVM的C、C++和Objective-C编译器工具链,用于生成Windows 64位原生可执行文件。 |
MSYS2 CLANGARM64 | 同样基于Clang,但针对ARM64架构(如Windows on ARM),为ARM64平台提供编译环境。 |
MSYS2 MINGW32 | 运行32位MinGW-w64工具链的命令行环境,适用于编译面向32位Windows系统的原生应用。 |
MSYS2 MINGW64 | 提供64位MinGW-w64工具链的命令行环境,主要用于编译运行在64位Windows系统上的原生应用,是常用的开发选项。我用的这个 |
MSYS2 MSYS | 基于POSIX兼容层的Shell环境,提供较为完整的Unix/Linux-like环境,支持那些需要较高程度POSIX兼容性的软件编译或脚本执行。 |
MSYS2 UCRT64 | 使用Universal CRT (UCRT) 的64位工具链环境,该环境下的工具链依赖较新的Windows SDK,可能包含对最新Windows特性和API的支持。 |
接下来的操作需要用到 pacman 命令,此表是简单的介绍,先了解一下:
命令 | 功能描述 |
---|---|
pacman -Syu | 同步并更新系统所有的软件包到最新版本(包括内核与核心库) |
pacman -S package_name | 安装指定的单个软件包及其依赖 |
pacman -S package1 package2 | 安装多个指定的软件包及它们的依赖 |
pacman -R package_name | 卸载指定的软件包,但保留其配置文件 |
pacman -Rs package_name | 卸载指定的软件包,并删除其配置文件 |
pacman -Ss search_term | 搜索软件仓库中包含指定关键词的软件包 |
pacman -Q 或 pacman -Qe | 列出已安装的所有软件包 |
pacman -Qi package_name | 查询特定软件包的详细信息 |
pacman -Qo /path/to/file | 查看指定文件属于哪个已安装的软件包 |
pacman -Scc | 清理缓存,删除所有未使用的包文件 |
pacman -Sy | 只同步软件数据库,不进行更新操作 |
pacman -Su | 更新所有已安装且有更新版本的软件包 |
pacman -Syu --noconfirm | 强制更新系统且不询问用户确认 |
pacman 添加镜像源
# 编辑源
nano /etc/pacman.d/mirrorlist.mingw64
将清华镜像添加到开头 Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
最后 Ctrl + X
退出如有提示按 Y
保存
GCC
1. 安装
我是 win11 x64系统,所以我装这个版本 mingw-w64-x86_64-gcc
# 查看
pacman -Ss mingw-w64-x86_64-gcc
# 安装前,先更新数据库和软件包,确保是最新的(如果需要)
pacman -Syu
# 如果有核心包更新,会关闭 MSYS2,自己手去打开 MSYS2 后再执行一下,继续完成非核心包更新
pacman -Syu
# 安装
pacman -S mingw-w64-x86_64-gcc
2. 查看结果
安装完成后 D:\msys64\mingw64\bin
目录下就有东西了
打开 D:\msys64\mingw64\bin
目录,
在地址栏输入 cmd
打开命令行,输入命令查看版本
gcc --version
、g++ --version
3. 环境变量
将 D:\msys64\mingw64\bin
添加到环境变量。
WIN + R
打开运行窗口.。- 输入
rundll32 sysdm.cpl,EditEnvironmentVariables
按Ctrl + Shift + 回车
打开窗口。 - 在
系统变量
中找到Path
点编辑。 - 新增一条记录,写入
D:\msys64\mingw64\bin
GDB
# 安装
pacman -S mingw-w64-x86_64-gdb
VSCode 调试
所需插件
安装 C/C++ Extension Pack 就够了,C/C++ 扩展包
包含了在 Visual Studio Code 中进行 C++ 开发的一系列热门扩展:
- C/C++
- C/C++ Themes
- CMake
- CMake Tools
创建项目
- 新建一个文件夹
demo1
用 VSCode 打开。 - 创建
helloworld.cpp
文件,内容:
#include <iostream>
#include <string>
using namespace std;
int main()
{
cout << "Hello World" << endl;
}
调试代码
因为 D:\\msys64\\mingw64\\bin\\g++.exe
、D:\\msys64\\mingw64\\bin\\gdb.exe
已经添加到环境变量。所以下面的配置中也可以改为相对路径
。
1. tasks.json 配置任务
终端 > 配置默认生成任务…
完成后将自动生成 tasks.json,内容如下:(注意检查 command
、cwd
是否正确)
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "D:\\msys64\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "编译器: D:\\msys64\\mingw64\\bin\\g++.exe"
}
],
"version": "2.0.0"
}
2. launch.json 配置调试
我们来设置 gdb 调试
如此可自动创建 launch.json,内容如下:(注意检查miDebuggerPath
是否正确)
{
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "D:\\msys64\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
],
"version": "2.0.0"
}
3. 运行
打开 helloworld.cpp
文件,按 F5
运行。
更进一步的 C/C++ 设置
c_cpp_properties.json
用于更改编译器路径、包含路径、C++ 标准(默认为 C++17)等设置。
- 命令面板:
Ctrl + Shift + P
输入C/C++
选择:
- 添加一个配置,并设置后会生成
c_cpp_properties.json
文件
c_cpp_properties.json
内容:
{
"configurations": [
{
"name": "g++",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.19041.0",
"compilerPath": "D:/msys64/mingw64/bin/g++.exe",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "windows-gcc-x64"
}
],
"version": 4
}
参考资料
中国科学技术大学 http://mirrors.ustc.edu.cn/
清华大学 https://mirrors.tuna.tsinghua.edu.cn/
Using GCC with MinGW
launch.json and tasks.json 使用 ${variableName} 语法
MSYS2安装gcc、make环境
【VSCode】C++环境配置(小白必看)