vscode 与 C++

具体流程的话,官方文档里都有的:C++ programming with Visual Studio Code

  1. 浏览器下载一个mingw64,解压,配置环境变量
  2. vscode里安装c++相关的插件
  3. 没了

第一步只看文字,可能有点抽象,相关视频:

关于mingw64的下载:【【教程】VScode中配置C语言/C++运行环境】 【精准空降到 01:32】

下载以后环境变量的配置:【安装mingw】 【精准空降到 05:32】

流程大概就是如此,这里主要记录遇到的一些问题。 

文件的解压

mingw64,下载以后,是个7z格式的压缩包,需要解压。(解压前约40MB,解压后约400MB)

windows原生好像解压不了这种格式的,所以这里装了下这个:

7-Zip

假如中间出了错

比如,写的是cpp,但是第一次选编译器的时候误选了gcc而不是g++,就可能会报错。

第一次会弹窗,让选一个编译器

怎么改回来?

官方文档:编译器只有第一次才会弹窗,让手动选编译器,后面就默认照着第一次选的来了。

所以,弹窗选择编译器只存在于首次运行,第一次选错了,它就会把一个错误的值当成默认值,后面也不会再弹窗让选择了,只能将错就错……

这个时候,可以删掉.vscode文件夹。默认的设置就在这个文件夹的tasks.json里,把它删了,默认的就不存在了,再运行就会弹窗提示重新选择编译器了。

和tasks.json相关的配置错误,应该都能这么搞吧。

关于编译器的介绍

mingw64是什么的缩写?简单介绍一下

  • Mingw-w64是一个基于MinGW(Minimalist GNU for Windows)的跨平台开发环境,用于在Windows操作系统上构建和编译GNU软件。它提供了一个完整的GNU环境,包括C、C++、Fortran等语言的编译器、调试器、库文件等。
  • Mingw-w64中的"mingw"表示"Minimalist GNU for Windows",而"w64"则表示它支持64位Windows操作系统。与传统的MinGW相比,Mingw-w64具有更好的兼容性和可移植性,支持更多的Windows API函数,并且可以更好地处理64位代码的编译和调试。
  • Mingw-w64的开发始于2000年,经过多年的发展和改进,已经成为一个稳定且广泛使用的跨平台开发工具。它为开发者提供了一个在Windows上构建和调试GNU软件的环境,使得开发者可以在Windows平台上进行开发,并生成可在多种操作系统上运行的可执行文件。

什么是gnu软件?

  • GNU软件是由自由软件基金会(FSF)开发和维护的一个操作系统,其名称来源于GNU(GNU's Not Unix)的缩写。GNU软件是一种与Unix系统兼容的类Unix操作系统,由一系列软件应用程序、开发人员工具以及一个分配资源并和硬件或内核通信的程序组成。
  • GNU软件包括许多知名的大型软件,如GNU Compiler Collection(GCC)、GNU Debugger(GDB)、GNU Binutils、GNU Hello等。其中,GCC是GNU系统的主要编译器,支持多种编程语言,包括C、C++、Objective-C、Fortran、Ada等。GDB是GNU系统的调试器,可以用于在程序运行时进行调试。GNU Binutils是一组二进制工具,包括ld、as、objcopy等,用于处理二进制文件。
  • GNU软件的一个重要特点是其自由软件许可证,这意味着用户可以自由地获取、使用、修改和分发该软件的源代码。此外,GNU软件还强调用户的自由和权利,包括对软件的支配权和使用权,以及保护用户的隐私和自由。
  • 总之,GNU软件是一个基于Unix开发设计,并与Unix兼容的类Unix操作系统,由自由软件基金会开发和维护。它包括许多重要的软件应用程序和开发工具,并且强调用户的自由和权利。

mingw64,gcc,g++,gdb,有什么关系?

  • mingw64:这是一款可以在Windows操作系统上编译和运行GNU程序的工具,它提供了一个GNU环境,包括GCC(GNU Compiler Collection)编译器、GNU binutils工具、GNU Hello程序等。mingw64可以让你在Windows上编译运行GNU程序,也可以让你的程序调用Windows的API函数。
  • gcc:GNU Compiler Collection(GCC)是一款自由软件,它提供了编译、汇编、链接等程序语言开发所需的各种工具。GCC支持多种编程语言,包括C、C++、Objective-C、Fortran、Ada等。它是一款非常强大的编译器,可以编译各种类型的程序,包括桌面应用程序、服务器程序、嵌入式程序等。
  • g++:GNU g++是GCC编译器的一个C++编译器,它可以将C++源代码编译成可执行程序。g++支持C++语言的各种特性,包括类、模板、异常处理等。它是C++程序员的必备工具之一。
  • gdb:GNU Debugger(GDB)是一款源代码级别的调试器,它支持多种编程语言,包括C、C++、Objective-C、Fortran等。GDB可以让你在程序运行时进行调试,包括设置断点、单步执行、查看变量值等操作。它是程序开发人员调试程序的重要工具之一。

如何理解task.json里的args?

这个args,是从哪里冒出来的? ——结合命令行,就好理解了

命令行与参数

三分钟上手g++编译器_哔哩哔哩_bilibili

这里,命令行的-o参数的值设置的是test 

这个例子,也类似:

MinGW-w64 C/C++编译器下载和安装_mingw64_石凌风SLF的博客-CSDN博客

设置-o参数的值为mainCPPout

参数与json

vscode里,图形界面里点一下run就运行了,没用到命令行。怎么做的?命令行套壳。 比如给ffmpeg套图形界面的壳。

所以,命令行只是被套了个壳,看不见了,并不是不存在了,所以,命令行参数还是要指定的。

在哪里指定?在vscode的json文件里:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 生成活动文件",
            "command": "D:\\software\\mingw64\\bin\\g++.exe",
            "args": [ // arguments,参数
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",    // 参数名,表示这里是要给-o参数赋值,而不是-g参数或者其他的什么参数
                "${fileDirname}\\${fileBasenameNoExtension}.exe", // 想要给-o参数赋的具体值
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

后记

个人理解,仅供参考

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

科技云报道:AI+云计算共生共长,能否解锁下一个高增长空间?

科技云报道原创。 在过去近一年的时间里,AI大模型从最初的框架构建,逐步走到落地阶段。 然而,随着AI大模型深入到千行百业中,市场开始意识到通用大模型虽然功能强大,但似乎并不能完全满足不同企业的个性化需求。 大…

Three.js后处理后物体表面出现条纹

初始化 WebGLRenderer 时简单启用 logarithmicDepthBuffer: true 解决了问题。 根据文档,启用可能会导致性能下降,因此请根据您的性能预算考虑使用它。 缩小相机的near和far 后处理对于深度精度非常敏感。大视锥体很快就会使此类 AO 通道变得无法使用 th…

因果推断(六)基于微软框架dowhy的因果推断

因果推断(六)基于微软框架dowhy的因果推断 DoWhy 基于因果推断的两大框架构建:「图模型」与「潜在结果模型」。具体来说,其使用基于图的准则与 do-积分来对假设进行建模并识别出非参数化的因果效应;而在估计阶段则主要…

合宙Air724UG LuatOS-Air LVGL API控件--容器 (Container)

容器 (Container) 容器是 lvgl 相当重要的一个控件了,可以设置布局,容器的大小也会自动进行调整,利用容器可以创建出自适应成都很高的界面布局。 代码示例 – 创建容器 cont lvgl.cont_create(lvgl.scr_act(), nil) lvgl.obj_set_auto_re…

java之SpringBoot基础、前后端项目、MyBatisPlus、MySQL、vue、elementUi

文章目录 前言JC-1.快速上手SpringBootJC-1-1.SpringBoot入门程序制作(一)JC-1-2.SpringBoot入门程序制作(二)JC-1-3.SpringBoot入门程序制作(三)JC-1-4.SpringBoot入门程序制作(四)…

C语言练习7(巩固提升)

C语言练习7 编程题 前言 “芳林新叶催陈叶,流水前波让后波。”改革开放40年来,我们以敢闯敢干的勇气和自我革新的担当,闯出了一条新路、好路,实现了从“赶上时代”到“引领时代”的伟大跨越。今天,我们要不忘初心、牢记…

NV21、NV12、YV12、RGB565、YUV等颜色编码格式区别和接口设计探讨

NV21、NV12、YV12、RGB565、YUV扫盲 NV21、NV12、YV12、RGB565、YUV分别是不同的颜色编码格式,这些颜色编码格式各有特点,适用于不同的应用场景。选择合适的颜色编码格式取决于具体的需求和环境: NV21:NV21是一种用于Android系统…

JVM的故事——类文件结构

类文件结构 文章目录 类文件结构一、概述二、无关性基石三、Class类文件的结构 一、概述 计算机是只认由0、1组成的二进制码的,不过随着发展,我们编写的程序可以被编译成与指令集无关、平台中立的一种格式。 二、无关性基石 对于不同平台和不同平台的…

最小生成树 -prim算法

一般无向图建图稠密图-prim算法稀疏图-kruskal算法 prim : 加点法 1.先随机选一个点,加入集合 ,之后寻找最短的距离的点加入集合,行程最小生成树。 2.注意最小生成树是不能有回路的, 所以可以把回路设置成最大值,即假装…

【python爬虫】8.温故而知新

文章目录 前言回顾前路代码实现体验代码功能拆解获取数据解析提取数据存储数据 程序实现与总结 前言 Hello又见面了!上一关我们学习了爬虫数据的存储,并成功将QQ音乐周杰伦歌曲信息的数据存储进了csv文件和excel文件。 学到这里,说明你已经…

k8s etcd 简介

Etcd是CoreOS基于Raft协议开发的分布式key-value存储,可用于服务发现、共享配置以及一致性保障(如数据库选主、分布式锁等)。 如,Etcd也可以作为微服务的注册中心,比如SpringCloud也基于ETCD实现了注册中心功能&#…

Jmete+Grafana+Prometheus+Influxdb+Nginx+Docker架构搭建压测体系/监控体系/实时压测数据展示平台+遇到问题总结

背景 需要大批量压测时,单机发出的压力能力有限,需要多台jmeter来同时进行压测;发压机资源不够,被压测系统没到瓶颈之前,发压机难免先发生资源不足的情形;反复压测时候也需要在不同机器中启动压测脚本&…

OpenCV c++ 使用imshow显示灰色窗口

OpenCV使用imshow显示灰色窗口 原因是使用了system(‘pause’);函数,只需要将该函数去掉,使用opencv中的对应函数 waitKey(0) 即可实现同样效果。 system(“pause”); 改为: cv::waitKey(0); 显示效果:

金融客户敏感信息的“精细化管控”新范式

目 录 01 客户信息保护三箭齐发,金融IT亟需把握四个原则‍ 02 制度制约阻碍信息保护的精细化管控 ‍‍‍‍‍‍‍ 03 敏感信息精细化管控范式的6个关键设计 04 分阶段实施,形成敏感信息管控的长效运营的机制 05 未来,新挑战与新机遇并存 …

2023蓝帽杯初赛ctf部分题目

Web LovePHP 打开网站环境,发现显示出源码 来可以看到php版本是7.4.33 简单分析了下,主要是道反序列化的题其中发现get传入的参数里有_号是非法字符,如果直接传值传入my_secret.flag,会被php处理掉 绕过 _ 的方法 对于__可以…

vue自定义事件 div 拖拽方法缩小

在main.js 引用 // 引入拖动js import dragMove from "./utils/dragMove.js" 创建 drawmove.js export default (app) > {app.directive(dragMove, (el, binding) > {const DragVindow el.querySelector(binding.value.DragVindow)// 按下鼠标处理事件con…

【java中的Set集合】HashSet、LinkedHashSet、TreeSet(最通俗易懂版!!)

目录 一、HashSet集合 1.HashSet集合的特点 2.HashSet常用方法 二、LinkedHashSet集合 LinkedHashSet集合的特点 三、TreeSet集合 1.TreeSet集合的特点 2.TreeSet的基本使用 四、HashSet、LinkedHashSet、TreeSet的使用场景 五、list和set集合的区别 一、HashSet集合 …

分布式任务调度框架

分布式任务调度框架 学习为主 文章目录 分布式任务调度框架一、概念二、架构图三、任务调度的流程定时触发任务是如何实现的?:使用时间轮实现定时执行任务逻辑:3.1 对到达now时间后的任务(超出now 5秒外)3.2 对到达now时间后的任务&#xff0…

苹果为 Vision Pro 头显申请游戏手柄专利

苹果Vision Pro 推出后,美国专利局公布了两项苹果公司申请的游戏手柄专利,其中一项的专利图如下图所示。据 PatentlyApple 报道,虽然申请专利并不能保证苹果公司会推出游戏手柄,但是苹果公司同时也为游戏手柄申请了商标&#xff0…

Navicat使用HTTP通道服务器进行连接mysql数据库(超简单三分钟完成),centos安装nginx和php,docker安装nginx+php合并版

序言 因为数据库服务器在外网是不能直接连接访问的,但是可以访问网站,网站后台就能访问数据库,所以在此之前,访问数据库的数据是一件非常麻烦的事情,在平时和运维的交流中发现,他们会使用ssh通道进行连接访…