C++ 开发 + VSCode 调试

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:
    1. 主要功能是提供一个在Windows操作系统上模拟类Unix环境的开发和构建工具集。它提供了一个模拟POSIX系统的命令行接口和包管理器(Pacman)。
    2. MSYS2基于Cygwin技术,但它更专注于构建原生Windows应用程序。
    3. 它的目标是创建一个易于使用的开发平台,使得开发者能够在Windows上编译和运行那些原本在Unix/Linux环境下开发的开源软件。
  • MinGW-w64:
    1. 是一个项目,其目的是为Windows提供GCC(GNU Compiler Collection)和其他工具链的移植版本,以便能够直接生成64位或32位Windows原生可执行文件,无需依赖Cygwin或其他兼容层。
    2. MinGW-w64支持现代Windows特性,并解决了早期MinGW在64位系统支持上的局限性。
  • 两者的关系:
    1. MSYS2 集成了 MinGW-w64 工具链,使得用户可以通过简单的命令行操作安装和使用 GCC 编译器来编译 Windows 原生程序。
    2. 使用 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 -Qpacman -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 --versiong++ --version

在这里插入图片描述

3. 环境变量

D:\msys64\mingw64\bin 添加到环境变量。

  1. WIN + R 打开运行窗口.。
  2. 输入rundll32 sysdm.cpl,EditEnvironmentVariablesCtrl + Shift + 回车 打开窗口。
  3. 系统变量 中找到 Path 点编辑。
  4. 新增一条记录,写入 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

创建项目

  1. 新建一个文件夹 demo1 用 VSCode 打开。
  2. 创建 helloworld.cpp 文件,内容:
#include <iostream>
#include <string>using namespace std;int main()
{cout << "Hello World" << endl;
}

调试代码

因为 D:\\msys64\\mingw64\\bin\\g++.exeD:\\msys64\\mingw64\\bin\\gdb.exe 已经添加到环境变量。所以下面的配置中也可以改为相对路径

1. tasks.json 配置任务

终端 > 配置默认生成任务…
在这里插入图片描述
完成后将自动生成 tasks.json,内容如下:(注意检查 commandcwd 是否正确)

{"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)等设置。

  1. 命令面板:Ctrl + Shift + P 输入 C/C++ 选择:
    在这里插入图片描述
  2. 添加一个配置,并设置后会生成 c_cpp_properties.json 文件
    在这里插入图片描述
  3. 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++环境配置(小白必看)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/239299.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.16云支教(集合的概念、定义)

1.集合 1.集合的概念&#xff08;意思&#xff09; 把集合理解成一个塑料袋 要往塑料袋装什么&#xff0c; 装的元素就是里面装的各个东西&#xff0c; 表示方法 1。直接穷举 A{装的到底是什么&#xff08;竹子&#xff09;} 2.描述法 描述装的东西的性质&#xff0c;…

MySQL 从零开始:03 基本入门语句

文章目录 1、连接数据库1.1 命令提示符登陆1.2 MySQL 8.0 Command Line Client 登陆1.3 MySQL Workbench 登陆 2、基本语句2.1 查看所有库2.2 创建库2.3 删除库2.4 选择数据库2.5 查看表2.6 创建表2.7 删除表2.8 改表名2.9 清空表 在上一小节中介绍了 MySQL 数据库的安装&#…

统计学-R语言-4.1

文章目录 前言编写R函数图形的控制和布局par函数layout函数 练习 前言 安装完R软件之后就可以对其进行代码的编写了。 编写R函数 如果对数据分析有些特殊需要&#xff0c;已有的R包或函数不能满足&#xff0c;可以在R中编写自己的函数。函数的定义格式如下所示&#xff1a; …

找不到mfc100.dll的解决方法,怎么修复mfc100.dll文件

当我们在使用电脑时&#xff0c;时常可能会遇到各类系统提示的错误信息。"找不到mfc100.dll" 就是这些错误之一&#xff0c;该错误提示会妨碍我们执行一些应用程序或特定代码。为了帮助读者克服这个技术障碍&#xff0c;本篇文章将详尽阐明导致该问题的根本原因&…

白码CRM快速实现报价转订单功能

某crm项目已经做到销售模块了&#xff0c;销售模块实现了从报价到销售单&#xff0c;再到财务模块的应收流程。但使用过程中发现不好用的地方&#xff1a;报价通过后客户下单&#xff0c;销售相关人员又要重新录入数据一样的销售单&#xff0c;觉得这样的操作比较繁琐&#xff…

vue3-响应式基础之reactive

reactive() 还有另一种声明响应式状态的方式&#xff0c;即使用 reactive() API。与将内部值包装在特殊对象中的 ref 不同&#xff0c;reactive() 将使对象本身具有响应性&#xff1a; 「点击按钮1」 <script lang"ts" setup> import { reactive } from vuec…

一文了解Spring线程池(超详细+干货满满)

Spring默认线程池 simpleAsyncTaskExecutor Spring异步线程池的接口类是TaskExecutor &#xff0c;本质还是 java.util.concurrent.Executor&#xff0c;没有配置的情况下&#xff0c;默认使用的是 simpleAsyncTaskExecutor Component EnableAsync public class ScheduleTask…

如何理解产品经理和项目经理的区别?

最近很多人咨询“项目经理跟产品经理该怎么选&#xff0c;我更适合哪个&#xff1f;”“项目经理跟产品经理哪个更有钱途 ”等等&#xff0c;今天就一次性说清楚项目经理跟产品经理有什么区别&#xff0c;应该怎么选择。 不想看长篇大论的&#xff0c;来找我&#xff0c;直接把…

2023年上半年软件设计师下午真题及答案解析

试题一(15分) 随着农业领域科学种植的发展&#xff0c;需要对农业基地及农事进行信息化管理&#xff0c;为租户和农户等人员提供种植相关服务&#xff0c;现欲开发农事管理服务平台&#xff0c;其主要功能是&#xff1a; (1)人员管理&#xff1a;平台管理员管理租户&#xff…

在linux环境下安装lnmp

lnmp官网&#xff1a;https://lnmp.org 一&#xff1a;lnmp安装 参考&#xff1a;https://lnmp.org/install.html 1&#xff1a;下载lnmp安装包 wget https://soft.lnmp.com/lnmp/lnmp2.0.tar.gz -O lnmp2.0.tar.gz 2&#xff1a;解压lnmp安装包 tar zxf lnmp2.0.tar.gz …

Python-高阶函数

在Python中&#xff0c;高阶函数是指能够接收函数作为参数&#xff0c;或者能够返回函数的函数。这种特性使得函数在Python中可以被灵活地传递和使用。以下是一些关于Python高阶函数的详细解释&#xff1a; 函数作为参数&#xff1a; 高阶函数可以接收其他函数作为参数。这样的…

C++多线程学习[四]:多线程的通信和同步、互斥锁、超时锁、共享锁

一、多线程的状态 初始化 &#xff08;Init&#xff09;&#xff1a;该线程正在被创建。就绪 &#xff08;Ready&#xff09;&#xff1a;该线程在就绪列表中&#xff0c;等待CPU的调度。运行 &#xff08;Running&#xff09;&#xff1a;该线程正在运行。阻塞&#xff08;Bl…

**登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**

用户登录——>数据加密数据库比对——>生成jwt令牌封装返回——>拦截器统一拦截进行jwt校验-并将数据放入本地线程中。 0、 ThreadLocal 介绍&#xff1a; ThreadLocal 并不是一个Thread&#xff0c;而是Thread的线程局部变量。 ThreadLocal为每个线程提供单独一份…

边缘计算的挑战和机遇

目录 前言 一、边缘计算 &#xff08;一&#xff09;为什么需要边缘计算 &#xff08;二&#xff09;什么是边缘计算 &#xff08;三&#xff09;边缘计算体系架构 &#xff08;四&#xff09;边缘计算的好处 二、案例分析 &#xff08;一&#xff09;云卸载 &#xf…

三个视频提取软件一键快速提取

在当今的社交媒体时代&#xff0c;短视频分享已经成为一种流行的表达方式。然而&#xff0c;有时我们遇到视频过长或水印影响观看体验的情况。这时&#xff0c;一款快速、高效的短视频提取软件就显得尤为重要。今天&#xff0c;我们就为大家推荐三款优秀的短视频提取软件。 水…

【MATLAB】Linux版本 高分辨率屏 调整显示缩放

0 引言 安装了linux版本的MATLAB R2023b之后&#xff0c;发现工具栏字体很小不方便使用&#xff0c;所以上网找到了MATLAB论坛上某位大佬的教程&#xff1a;参考链接&#xff0c;放在这里供各位参考 。 1 环境 这里注明我的matlab安装环境仅供参考&#xff0c;未在其他环境下…

高级RAG技术、以及算法实现

知识库地址&#xff1a;Advanced RAG techniques 检索增强生成&#xff08;Retrieval Augmented Generation, RAG&#xff09;为大语言模型&#xff08;Large Language Model, LLM&#xff09;提供了一种机制&#xff0c;通过从数据源检索到的信息为其生成的答案提供依据。简而…

【VTKExamples::PolyData】第四期 DijkstraGraphGeodesicPath

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例DijkstraGraphGeodesicPath,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. DijkstraGraphGeodesicPath /…

【期末不挂科-C++考前速过系列P1】大二C++第1次过程考核(3道简述题&7道代码题)【解析,注释】

前言 大家好吖&#xff0c;欢迎来到 YY 滴C复习系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…

把屏幕变成毫米测量工具

主要功能&#xff1a; 根据屏幕的像素个数和物理长度对应关系&#xff0c;计算设置的实际长度&#xff0c;把屏幕当成直尺用。功能模仿FastStone里面的屏幕标尺工具 运行演示&#xff1a; 其他说明&#xff1a; 1.软件打开时会自动获取屏幕像素个数和物理长度&#xff0c;也可…