【VSCode】Windows 下搭建 C++ 环境

2023-05-16

文章目录

  • Part.I 预备知识
  • Part.II 搭建过程
  • Part.III 安装较高版本的MinGW

Part.I 预备知识

  • MinGW 提供了一套简单方便的Windows下的基于GCC 程序开发环境。MinGW 收集了一系列免费的Windows 使用的头文件和库文件;同时整合了GNU (http://www.gnu.org/)的工具集,特别是GNU 程序开发工具,如经典gcc, g++, make等。MinGW是完全免费的自由软件,它在Windows平台上模拟了Linux下GCC的开发环境,为C++的跨平台开发提供了良好基础支持,为了在Windows下工作的程序员熟悉Linux下的C++工程组织提供了条件。
  • 安装MinGW 需要注意的几点:① 建议选择Current版本,Previous表示以前的版本;Candidate表示当前正在开发的版本,可能正在测试中,还不是非常稳定。② 安装路径请选择一个容易找到的地方,默认的C:/Enviroments/MinGW 是不错的选择(ps: 默认是C:/MinGW,但是有当需要好多环境时不如选择前者)。
  • MinGW Installation Manager 中,复选框为『绿色』表示已经安装的项目,『白色』表示还未安装的项目。如果要卸载已安装的项目,右键→Mark for removal;如果要安装未安装的项目,右键→Mark for Installation。接着点击菜单栏InstallationApply Changes即可。
  • MSYS2 (Minimal SYStem 2) 是一个MSYS的独立改写版本,主要用于 shell 命令行开发环境。同时它也是一个在Cygwin (POSIX 兼容性层) 和 MinGW-w64(从”MinGW-生成”)基础上产生的,追求更好的互操作性的 Windows 软件。 MSYS2 是MSYS的一个升级版,准确的说是集成了pacman和Mingw-w64的Cygwin升级版, 提供了bash shell等linux环境、版本控制软件(git/hg)和MinGW-w64 工具链。与MSYS最大的区别是移植了 Arch Linux的软件包管理系统 Pacman(总之就是很NB就对了)。

Part.II 搭建过程

https://blog.csdn.net/qq_40477151/article/details/103917156
详细的过程可以参看这个,下面简要记录一下整个过程。
补于 2022-12-26,用的时候发现没法看STL容器的值,有点不爽,根据前辈经验,发现是MinGW版本太低的原因,建议下更高版本的MinGW,下载教程如第三部分所示。


  • 安装MinGW: https://sourceforge.net/projects/mingw/files/latest/download
  • MinGW Installation Manager 中安装gdb, gcc, g++
  • 设置环境变量:右键『我的电脑』→属性→高级系统设置→环境变量→系统变量→新建MinGW,并将其值赋成C:\MinGW(你装在哪里就赋成啥)
  • 设置Path:在系统变量Path中添加路径%MinGW%\bin,之后点确定
  • 检查是否安装好:在powershell中输入gcc -v看看能否找到指令

然后下载一个c/c++插件,在工程目录下新建含有三个名为launch.json, tasks.json, c_cpp_properties.json文件的文件夹.vscode。这三个文件中

  • launch.json可以实现设断点调试,选择调试器与需要调试的文件进行调试。
  • tasks.json可以实现自动编译,这个只能执行最简单的编译指令。
  • c_cpp_properties.jsonccpp选项。并不太需要去动它,如果出现明明在系统环境中的头文件找不到的情况,那就很可能是这里出问题了,在includePath里加上即可。

三个文件的内容如下(可根据自己的需求更改,这是笔者的配置):
launch.json文件内容:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示  
            "type": "cppdbg",       // 配置类型,这里只能为cppdbg  
            "request": "launch",    // 请求配置类型,可以为launch(启动)或attach(附加)  
            "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径  
            "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可  
            "stopAtEntry": false,   // 设为true时程序将暂停在程序入口处,一般设置为false  
            "cwd": "${workspaceFolder}", // 调试程序时的工作目录,一般为${workspaceFolder}即代码所在目录  
            "environment": [],
            "externalConsole": true,     // 调试时是否显示控制台窗口,一般设置为true显示控制台  
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\MinGW\\bin\\gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应  
            "preLaunchTask": "g++",     // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc  
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

tasks.json文件内容:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558 
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "g++", //这里注意一下,见下文
            "command": "C:\\MinGW\\bin\\g++.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
                //"-ggdb3", // 生成和调试有关的信息
                //"-Wall", // 开启额外警告
                "-static-libgcc", // 静态链接
                "-std=c++17", // 使用c++17标准
                "-finput-charset=UTF-8",    //输入编译器文本编码 默认为UTF-8
                "-fexec-charset=GB18030",   //输出exe文件的编码
                "-D _USE_MATH_DEFINES"
            ],
            "options": {
                "cwd": "C:\\MinGW\\bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "presentation": {
                "echo": true,
                "reveal": "never", // 在“终端”中显示编译信息的策略,可以为always,silent,never
                "focus": false,
                "panel": "shared" // 不同的文件的编译信息共享一个终端面板
            },
        }
    ]
}

c_cpp_properties.json文件内容:

{
    "configurations": [
        {
            "name": "MinGW64",
            "intelliSenseMode": "gcc-x64",
            "compilerPath": "C:\\MinGW\\bin\\g++.exe",
            "includePath": [
                "${workspaceFolder}",
                "C:\\gwork\\third-party\\Eigen" 	//Eigen库包含路径
            ],
            "cppStandard": "c++17"
        }
    ],
    "version": 4
 }

Part.III 安装较高版本的MinGW

官网教程:https://code.visualstudio.com/docs/cpp/config-mingw
因为调试 C++ 看不到vector的值,在网上搜了一下发现是 gdb 的版本太低(8.1以上就行,之前下的是7.6.1),所以才有了这些折腾。

步骤如下:

1、下载msys2

在这里插入图片描述
2、安装,将其放到一个合适的路径,比如笔者放在了A:\Programs\msys64
3、运行MSYS2,一次输入如下指令

pacman -Syu
pacman -Su
pacman -S --needed base-devel mingw-w64-x86_64-toolchain

前两个指令一路Y回车,后面的一条指令会让你选要装啥,我就装了红框的两个。

在这里插入图片描述

4、设置环境变量:

  • 右键『我的电脑』→属性→高级系统设置→环境变量→系统变量→新建MinGW,并将其值赋成A:\Programs\msys64\mingw64(你装在哪里就赋成啥)
  • 设置Path:在系统变量Path中添加路径%MinGW%\bin,之后点确定
  • 检查是否安装好:在powershell中输入gcc -v看看能否找到指令

关于 VSCode 显示 Vector 的值,在launch.json中加如下设置:

"setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]

然后就可以看到 vector 的值了。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【VSCode】Windows 下搭建 C++ 环境 的相关文章

  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 使用 Windows 套接字的 WriteFile 返回无效参数错误

    我已经在 Windows 套接字上苦苦挣扎了两天 无法像在 Linux 中那样只使用写入套接字 我想编写自己的 shellcode 并且正在研究如何将 stdout stdin 重定向到套接字句柄 这就是我的演奏的来源 如果有必要 我使用
  • 使用 Windows 网络共享目录时 Hg 存储库损坏

    我希望我能在这里得到一些帮助 因为 SO UX 比 Mercurial 邮件列表更好 多年来我一直在家里愉快地使用 Mercurial 我还将它与 Bitbucket Cloud 一起用于一些更严肃 但仍然是爱好 的项目 去年 我将我的团队
  • Docker 警告:无法从守护进程获取默认注册表端点

    在 Windows 10 上 当我调用 docker 命令时 docker pull mongo windowsservercore 我得到以下输出 Warning failed to get default registry endpoi
  • _CrtCheckMemory使用示例

    我试图了解如何使用 CrtCheckMemory追踪我正在开发的 Windows 应用程序中的堆损坏 我似乎无法让它返回false 这是我的测试代码 int test new int 1 for int i 0 i lt 100 i tes
  • 按名称显示进程的命令行

    我在cmd中使用以下命令来获取进程命令行 它提供了所有流程的详细信息 WMIC OUTPUT C ProcessList txt PROCESS get Caption Commandline Processid 我想在记事本中按名称获取特
  • 使用 Rust 构建的 DLL 在运行时是否需要 libgcc.dll?

    如果我构建一个 DLLRust 语言 http rust lang org 是否需要libgcc dll在运行时出现 一方面 我在互联网上的某个地方看到过一个帖子 声称是的 rustc exe has libgcc s dw2 1 dll在
  • 高级 Win32 图像文件 I/O?

    我想在 Windows C 应用程序中将图像文件读入内存 什么是一个相当简单的解决方案 也许类似于 IOS 提供的UIImage 我希望支持合理数量的文件格式 我需要为图像处理的位图提供一些低级访问权限 我在互联网上阅读了很多内容 看起来
  • x86 LargeAddressAware 兼容性的单元测试

    对于 win32 可执行文件 x86 我们可以设置 LargeAddressAware 标志 以便它在 x64 Windows 上运行时可以访问 4 GB 而不是仅 2 GB 的虚拟地址空间 这看起来很吸引人 然而 这也存在风险 例如参见
  • 如何使用 MSYS2 获取旧版本的软件包?

    我决定尝试 CLion for Windows 它推荐使用 MinGW 或 Cygwin 进行编译 我安装了MSYS2 http sourceforge net p msys2 wiki MSYS2 20installation 包管理器进
  • Powershell:获取 FQDN 主机名

    我想通过 powershell 脚本检索 Windows 服务器的 FQDN 名称 到目前为止我已经找到了2个解决方案 server Invoke Command ScriptBlock hostname 上面的行将仅打印服务器的短名称 s
  • 当系统上没有留下任何可执行文件时,如何卸载 Windows 服务?

    当系统上没有留下任何可执行文件时 如何卸载 Windows 服务 我跑不了installutil u因为系统上没有留下可执行文件 我仍然可以在服务控制台中看到该服务的条目 出现这种状态的原因可能是因为 msi 包中存在问题 没有正确删除服务
  • WndProc调用机制(WinAPI)

    我试图了解 Windows 应用程序是如何工作的 有一个WndProc函数 其中发生消息处理 LRESULT CALLBACK WndProc HWND hwnd UINT msg WPARAM wParam LPARAM lParam s
  • 在 Windows 下克隆 git repo 时,出现“错误:无法创建文件 <文件>...(是目录)”

    Z gt git clone git github com kennethreitz httpbin git Cloning into httpbin remote Counting objects 1073 done remote Com
  • 为什么某些安装程序需要在运行程序之前重新启动计算机?

    我对部署桌面应用程序相当陌生 所以这是我第一次为我的软件构建安装程序 目前 我安装软件后第一次运行它时 它崩溃了 之后 它运行良好 我仍在调试此问题 但我注意到在安装后和运行软件之前立即重新启动似乎可以修复此崩溃 某些安装程序要求您在运行软
  • 调整屏幕和字体设置的 WPF 应用程序(或者,我如何将 DLU 与 WPF 中的单元相关联?)

    在MFC中 对话框的设计使用DLUs http msdn microsoft com en us library bb847924 aspx 在 WPF 中 我们以 1 96 英寸为单位指定 虽然这确实会缩放窗口和视觉元素 但我们如何使 W
  • 如何在 Windows 上应用差异补丁?

    有很多程序可以创建差异补丁 但我在尝试应用一个程序时遇到了很大的困难 我正在尝试分发补丁 但用户向我询问了如何应用该补丁 于是我尝试自己弄清楚 结果发现我毫无头绪 而且我能找到的大多数工具都是命令行的 我可以处理命令行 但是如果没有一个漂亮
  • QWinTaskbarProgress 不会显示

    我使用的是windows7和Qt5 3 0 我在 MainWindow 的构造函数中添加了以下内容 但任务栏上没有显示任何内容 我错过了什么 QWinTaskbarProgress pTaskbarProgress new QWinTask
  • Go 编译器有窗口化设置选项吗?

    我正在使用 Go 6g 编译 GTK 应用程序 我想知道是否有编译器 链接器选项使其成为 Windows 可执行文件而不是控制台可执行文件 MinGW 有一个 mwindows 选项来实现此目的 目前我必须使用十六进制编辑器手动更改 PE
  • Windows 上的 Node-Webkit 在 3 个不同的进程中运行?

    如果这是重复的 我很抱歉 我尝试过了Google https www google com search q node webkit three different processes on windows答案 但不是很有帮助 如果我使用运

随机推荐

  • 直流电机的简单详细的pid控制

    对于PID的基本原理在这里就不概述了 xff0c 想必大家找PID控制资料更多的是代码的实现 xff0c 而不是理论概述 如果真的不懂理论 xff0c 大家可以在CSDN上面搜索 废话不多说 xff0c 上代码 PID公式 xff1a 根据
  • 卡尔曼滤波-实战IMU姿态估计

    实战 IMU 卡尔曼滤波 基础知识已经准备的差不多了 xff0c 本章开始通过一个实际应用来真正感受一下卡尔曼滤波的魅力 xff01 IMU 滤波 陀螺仪 加速度计 加速度计传感器得到的是 3 轴的重力分量 xff0c 是基于重力的传感器
  • 卡尔曼滤波-EKF

    EKF EKF称为扩展卡尔曼滤波 xff0c 他和标准卡尔曼滤波有何区别呢 xff1f 他的出现主要是为了解决在非线性系统下的最优估计问题 xff0c 前面我们提到标准卡尔曼滤波只适用于线性系统 xff0c 对于非线性系统我们可以用EKF来
  • 解决wordpress安装主题或插件需要FTP问题

    如果该方法不行 xff0c 可参考另外一篇博文 xff1a http blog csdn net qq 32846595 article details 54766833 很多人在使用WordPress安装主题或插件时都要求填写FTP账号和
  • cortex M3 系统svc 系统调用

    STM32 SVCall 一个特殊的中断 xff1a SVCall 简述 xff1a 一种由程序进行触发的中断 xff0c 默认开启 起源 xff1a SVC xff08 系统服务调用 xff0c 亦简称系统调用 xff09 多用于在操作系
  • MIPI lcd屏幕调试方法总结

    以前工作都比较忙 xff0c 很少写总结性的东西了 xff0c 现在有空就写写吧 mipi 时钟比较高 xff0c 一般的小公司示波器是没法测试到波形的 xff0c 此时必须注意步骤 xff0c 否则会因为某些小细节而搞好几天甚至更久 1
  • linux 遇到的内核异常问题分析解决汇总

    nbsp nbsp nbsp 这些年曾经遇到过一些比较棘手的linux 异常问题 遗憾的是很多时候没有及时更新总结 导致我自己再次遇到的时候也要靠网络搜索相关文章去回忆解决办法 本文会持续更新 逐步完善linux 崩溃异常解决问题办法 nb
  • 记录调试Android 休眠唤醒过程中遇到的问题以及解决办法

    nbsp 最近在调试休眠唤醒 遇到不少问题 现在记录下解决问题问题的过程 1 休眠或者唤醒过程中内核异常 nbsp nbsp nbsp 具体解决办法 请看这篇linux 遇到的内核异常问题分析解决汇总 2 休眠过程中唤醒 nbsp nbsp
  • CSDN手机APP终于可以写博客了

    随着年龄增长 xff0c 博客是更新的越来越慢了 xff0c 在公司没时间 xff0c 现在在路上时间挺多 xff0c 当时想着APP能写博客就好了 xff0c 记得开始事不可以的 xff0c 如今这时代 xff0c 回到家开电脑逛论坛的时
  • 中国嵌入式高端ARM开发板的江湖故事——详细分析国内各家ARM11 S3C6410 开发板的选型以及竞争格局

    Topic xff1a 中国嵌入式高端ARM开发板的江湖故事 详细分析国内各家ARM11 S3C6410 开发板的选型以及竞争格局 作者 xff1a gooogleman 版权 xff1a gooogleman 邮箱 gooogleman
  • 分析各家2440开发板的性价比(初学者如何选择开发板)

    分析各家2440开发板的性价比 xff08 初学者如何选择开发板 xff09 作者 xff1a gooogleman 邮箱 xff1a gooogleman 64 foxmail com 地址 xff1a http blog csdn ne
  • 一个机械专业小混混(gooogleman)学习嵌入式ARM的真实经历

    我记得在我毕业一周年的时候 xff0c 写过一篇文章 xff0c 大概是讲我学习嵌入式wince驱动的经历 xff08 http topic csdn net u 20090704 01 43492b64 f7bf 4953 a31f db
  • 是时候想想再上一个台阶的时候了

    刚才 xff0c 被一个蚊子吵醒 xff0c 脑子里就想着一件事 xff1a 我这些年也是过的够淡定的了 xff0c 不管旁边发生任何事情 xff0c 我也不去做什么得失比较 xff0c 我乐于享受目前的现状 xff0c 一台还算稳定的国产
  • 关于wince6.0 升级全年包的注意事项(作者:gooogleman)

    作者 xff1a gooogleman Email xff1a gooogleman 64 foxmail com 最近在S5pv210 wince6 0 系统定制上更新了几个包 xff0c 发现了一些微软更新补丁包的问题 xff0c 现在
  • 二级域名绑定二级目录的两种方法

    当用WordPress建站后 xff0c WordPress位于二级目录 xff08 v ar www html xff09 下 xff0c 进行域名解析时如何把域名解析到二级目录下 xff0c 网络上一般有两种方法 xff0c 一是利用接
  • PMP 真的没用吗?

    最近在备考2018 3 24 的pmp 认证考试 xff0c 有不少收获 xff0c 此前我曾在群里邀请大家一起备考 xff0c 一些人跳出来就说考这些有啥用 xff1f 干技术的把技术干好就行了 xff0c 技术人员最烦这些没点技术的项目
  • 一个嵌入式产品的从研发到量产的流程(作者:gooogleman@foxmail.com)

    作者 xff1a gooogleman 64 foxmail com 一个嵌入式产品的开发流程是 1 了解清楚客户需求 2 模具开发 3 硬件工程师准备硬件 xff0c 物料选型 xff0c 原理图 xff0c PCB和模具工程师商议PCB
  • 【电赛国赛备赛笔记】【赛题经验分享会】

    存在的问题 光流问题 起飞后定不住飞行过程中方向太偏光照度对飞行稳定性的影响纹理变化对飞行稳定性的影响 目前还没有很好的解决办法 xff0c 但如果不限制使用器材的话 xff0c 用双目摄像头可能可以解决问题 赛题准备 视觉方面的算法和代码
  • APM32f003替换STM32进行低成本系统开发

    STM32F003是基于Arm Cortex M0内核的32位MCU xff0c 工作电压为2 4 3 6V xff0c 主频48MHz xff0c 内置16KB Flash 定时器 ADC 通信接口 APM32F003系列主频与STM32
  • 【VSCode】Windows 下搭建 C++ 环境

    文章目录 Part I 预备知识Part II 搭建过程Part III 安装较高版本的MinGW Part I 预备知识 MinGW 提供了一套简单方便的Windows下的基于GCC 程序开发环境 MinGW 收集了一系列免费的Windo