VS Code+MinGW 搭建Windows C++开发环境

官方文档是最香香的:https://code.visualstudio.com/docs/cpp/config-mingw

文章目录

  • 1、一些非常不友好的名词
    • 1.1 什么TMD是 GNU、MinGW、GCC、gcc、g++?
    • 1.2 MSVC
  • 2、获取g++编译器
  • 3、VS Code单文件编译和调试流程
    • 3.1 安装插件
    • 3.2 单个源文件编译运行
    • 3.3 tasks.json 指导编译
    • 3.4 launch.json 调试
    • 3.5 setting.json 设置
  • 4 CMake 使用
    • 4.1 创建一个CMake Hello World 项目
    • 4.2 CMake:Select a Kit 选择工具包
    • 4.3 CMake:Select Variant 选择变量
    • 4.4 CMake:Configure 生成配置文件
    • 4.5 CMake:Build 生成可执行文件
    • 4.6 CMake::Debug 调试

1、一些非常不友好的名词

1.1 什么TMD是 GNU、MinGW、GCC、gcc、g++?

好奇的可以看看,捋清楚他们之间的关系

  • 知乎高赞回答:捋一捋gcc/g++/MinGW/MSVC与make/CMake的关系
  • 另一篇CSDN博客:MinGW到底是个什么ghost

小总结:

  • GNU 对于目标是Windows开发的人来说不需要懂
  • MinGW(Minimalist GNU for Windows):MinGW 是一个允许在Windows上使用GNU工具链的开发工具集,使开发者能够在Windows平台上进行类Unix环境的开发。我们只需要知道,它有我们需要的编译器和调试器即可
  • GCC, GNU Compiler Collection,一堆编译器
  • gcc,用于编译C语言源代码的编译器
  • g++,用于编译C++语言源代码的编译器

简而言之,MinGW 是一个工具集,它允许在Windows上使用 GNU 工具链进行开发。GCC 是 GNU 工具链中的主要组件,而 gcc 和 g++ 是 GCC 的其中两个编译器,分别用于编译C和C++代码。

我们需要从中获取编译器g++,调试器gdb

1.2 MSVC

这是Visual Stuidio(IDE)用的编译器,在VSCode中,如果选择MSVC作为编译器,结果就是生成一个对应VS版本的.sln解决方案,后面就不说了吧 用Visual Studio 2022 打开就行。

如果是纯VS Code环境开发C++的话,毫无疑问还是要用 g++

2、获取g++编译器

  • 下载MinGW:https://sourceforge.net/projects/mingw-w64/files/
    Files里面选择64位用于windows平台的这个sjlj的版本(稳定版压缩包版本),解压后找到bin/g++.exe
    在这里插入图片描述

  • g++.exe的路径添加到系统环境变量中
    在这里插入图片描述

3、VS Code单文件编译和调试流程

篇幅考虑,下载VS Code就略过了

3.1 安装插件

  • C/C++
  • C/C++ Themes
  • Chinese(Simplified)

用途可以自己看插件说明

C/C++插件需要指定编译器路径,否则智能提示可能不管用

  • ctrl+shift+p -> 输入C/C++ -> 选择编辑配置(UI)
    在这里插入图片描述
  • 指定编译器路径,下拉菜单中一般都可以直接选择,VSCode中的这个插件会自动检查一遍环境变量,找到所有可用的编译器
    (还可以看看这里的其他设置,可以发现这里就是设置C++相关配置的)
    在这里插入图片描述
  • 如果选择用编辑配置(json),则会自动在.vscode文件夹下生成一个c_cpp_properties.json,这跟UI编辑界面的内容是一样的,并且在这两个地方任意一个地方进行改动后,另一个也会相应的发生变化。

3.2 单个源文件编译运行

  • 新建一个空白文件夹,写个hello world测试代码
    在这里插入图片描述
  • 直接点击运行(菜单栏运行或者三角图标)
    在这里插入图片描述
  • 选择g++.exe
    在这里插入图片描述
  • 运行成功,终端里面有Hello World!输出
    在这里插入图片描述

3.3 tasks.json 指导编译

此时可能注意到根目录下新增了一个文件.vscode/tasks.json,这是C/C++插件默认帮我们生成的,必须有这个文件才能编译

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 生成活动文件",
            "command": "E:\\MingGW\\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": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

它帮你简化了很多操作,这里的行为就相当于你在命令行里输入:

g++.exe fdiagnostics-color=always -g main.cpp -o main.exe
.\main.exe

tasks.json 是 Visual Studio Code(VSCode)中用于配置任务(tasks)的文件。任务是指一系列在 VSCode 中可以执行的操作,通常是编译、构建、运行程序。tasks.json 文件允许你定义这些任务的配置信息。

字段解释:

  • version: 指定 tasks.json 文件的版本。通常是 “2.0.0”。
  • tasks: 一个数组,包含了任务的配置信息。
  • label: 任务的标签,用于在 VSCode 中标识任务。
  • type: 任务的类型,通常是 “shell”(使用命令行)或 “process”(使用可执行程序)。
    - command: 执行任务的命令或可执行文件。这里就是调用g++.exe
    - args: 传递给命令或可执行文件的参数。这里是传给g++的编译命令
  • options: 任务的配置选项,例如设置工作目录cwd等。

3.4 launch.json 调试

  • 调试,需要创建launch.json,并指定调试相关配置属性,比如调试的目标可执行文件,调试采用的调试器路径等

  • 首先进入调试界面,创建launch.json,弹出的下拉菜单中选择C++(GDB)
    在这里插入图片描述

  • 默认创建好的文件中,右下角选择添加配置->(gdb)启动,这会为你生成默认的配置信息
    在这里插入图片描述

  • 默认生成的launch.json内容如下

    {
        // 使用 IntelliSense 了解相关属性。 
        // 悬停以查看现有属性的描述。
        // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "name": "(gdb) 启动",
                "type": "cppdbg",
                "request": "launch",
                "program": "输入程序名称,例如 ${workspaceFolder}/a.exe",
                "args": [],
                "stopAtEntry": false,
                "cwd": "${fileDirname}",
                "environment": [],
                "externalConsole": false,
                "MIMode": "gdb",
                "miDebuggerPath": "/path/to/gdb",
                "setupCommands": [
                    {
                        "description": "为 gdb 启用整齐打印",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    },
                    {
                        "description": "将反汇编风格设置为 Intel",
                        "text": "-gdb-set disassembly-flavor intel",
                        "ignoreFailures": true
                    }
                ]
            }
        ]
    }
    

    字段解释:

    • version: launch.json 文件的版本。通常是 “0.2.0”,表示使用的 JSON 配置文件格式版本。
    • configurations: 包含一个数组,每个元素是一个调试配置。
      • name: 调试配置的名称,用于在 VSCode 中标识不同的调试配置。
      • type: 调试器的类型。在这个配置中,是 “cppdbg”,表示使用 C++ 调试器。
      • request: 调试请求的类型。在这里是 “launch”,表示启动调试会话。
      • program待调试的程序的路径。须手动设置为"${workspaceFolder}/main.exe",表示工作区中main.exe。
      • args: 启动程序时传递的命令行参数。这里为空数组,表示没有附加的命令行参数。
      • stopAtEntry: 是否在程序入口处停止。在这里是 false,表示不停在程序入口处。
      • cwd: 启动程序时的工作目录。这里使用 ${fileDirname},表示使用当前文件所在的目录作为工作目录。
      • environment: 启动程序时使用的环境变量。这里是空数组,表示没有特定的环境变量设置。
      • externalConsole: 是否使用外部控制台。在这里是 false,表示使用 VSCode 的内部控制台。
      • MIMode: 调试器的模式。在这里是 “gdb”,表示使用 GDB(GNU Debugger)。
      • miDebuggerPathGDB 可执行文件的路径。改为 "E:\\MingGW\\mingw64\\bin\\gdb.exe",你需要将其替换为你系统中 GDB 的实际路径。
      • setupCommands: 一组 GDB 初始化命令,用于在调试会话开始时执行。这里包含了两个命令,分别用于启用漂亮打印和设置反汇编风格为 Intel。
  • 设置好之后,就可以开始断点调试了
    在源代码文件中打断点(F9),然后运行->启动调试(F5),也可以在三角按钮那里选择调试
    在这里插入图片描述

3.5 setting.json 设置

settings.json 是 VSCode中用于配置编辑器的各种行为和选项。这个文件存储了用户自定义的设置,以便在不同的项目和工作区中重用。VS Code会实时的把你修改过的设置写入到setting.json

  • 打开VSCode的设置
    在这里插入图片描述
  • 设置有两个作用域,一个是本机用户,另一个是当前项目的,用户作用域的setting.json文件是存放在C盘Users/username/AppData/Roaming/Code/user/中的,而作用域为当前项目的则是存放在项目根目录的.vscode/里面。
    在这里插入图片描述
  • 你用UI修改任何设置,都会马上生成一个setting.json文件,记录你刚修改的东西。你在设置里面进行的设置更改,会实时的写入到对应作用域的setting.json文件中,两者互相反射

4 CMake 使用

必须掌握的技能,目前github上开源项目几乎都采用CMake来维护,不会使用则寸步难行,学会CMake之后,其他的构建工具都简简单单,比如Premake。

  • 学习CMake语法可以看看github上一个高赞教程:https://github.com/ttroy50/cmake-examples/tree/master

需要:

  • 手动下载CMake:https://cmake.org/download/,并配置环境变量。检查是否安装成功,可以在命令行中输入命令
    cmake --version
    
  • 在VSCode中,设置CMake路径
  • 需要安装插件:CMake、CMake Tools

掌握CMake Tools: 强烈建议看看CMake Tools插件所指定的官方文档,进行学习。
简单来说,有了这个插件,你就不用编写task.json,launch.json了。下面是一个简单的使用案例
在这里插入图片描述

4.1 创建一个CMake Hello World 项目

创建一个文件夹,用VS Code打开,Ctrl+Shift+P输入CMake,选择Quick Start
在这里插入图片描述
输入项目名称,比如HelloProject,然后选择C++项目可执行文件
在这里插入图片描述
这会创建一个基本的CMake示例项目,包含一个源文件main.cppCMakeLists.txt(它会告诉CMake Tools插件如何构建你的项目)

生成可执行文件之前,还需要做2步准备工作

4.2 CMake:Select a Kit 选择工具包

在使用CMake Tools扩展构建项目之前,您需要配置它以了解系统上的编译器。通过扫描“工具包”来完成这个配置。一个工具包代表一个工具链,这是用于构建项目的编译器、链接器和其他工具

打开命令面板(Ctrl+Shift+P),运行“CMake: Select a Kit”。该扩展将自动扫描您计算机上的工具包,并创建找到的系统上的编译器列表。这里我们选择GCC 8.1.0这个,路径太长,实际上这个就是g++.exe
在这里插入图片描述
你可以在侧边栏看到你选择的kits
在这里插入图片描述

注意,CMake默认是选择MSVC编译器(如果你有)。所以第一次,一定要手动选kit,如果你选择自动配置CMake项目,当CMake Tools看到CMakeLists.txt,就一顿操作给你build文件夹搞出来了,里面躺着一个.sln- - 。在你这一套配置走下来后,之后的自动配置就用的gcc了

4.3 CMake:Select Variant 选择变量

这里的Variant也可以叫做变体,其实就是构建类型。一个Variant包含了构建项目的指令。默认情况下,CMake Tools扩展提供了四个Variant,分别对应于四种默认的构建类型:

  • Debug: 禁用优化并包含调试信息。
  • Release: 包含优化但没有调试信息。
  • MinRelSize: 优化以减小大小,没有调试信息。
  • RelWithDebInfo: 优化以提高速度,并包含调试信息。

要选择一个Variant,打开命令面板(Ctrl+Shift+P),运行“CMake: Select Variant”命令。
在这里插入图片描述
这里我选择Debug

4.4 CMake:Configure 生成配置文件

配置项目是指生成适用于选定kitvariant的构建系统所需的文件。这些文件包含构建项目所需的编译器、链接器、库等设置。一旦配置完成,您就可以继续使用其他 CMake 命令进行构建编译、链接调试该项目。

运行 CMake: Configure 命令来配置项目。这会产生一个build文件夹,里面放的是构建该项目所需要的所有配置信息

4.5 CMake:Build 生成可执行文件

终于可以build了,运行CMake:Build 或者在下边栏点击这个生成(build),中文版翻译为生成,作用就是生成可执行文件,默认是build all,因为大型项目可能有多个生成目标,可能有些是静态库、动态库、.exe,你可以选择只生成某一个,也可以生成所有。
在这里插入图片描述
在build里面可以找到.exe文件,运行它即可
在这里插入图片描述

4.6 CMake::Debug 调试

要运行和调试项目,请打开 main.cpp 并在 std::cout 行设置断点(F9),然后打开命令面板运行 CMake: Debug 即可

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

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

相关文章

(1)(1.10) SiK Radio v1

文章目录 前言 1 概述 2 连接无线电台 3 参数说明 前言 本文介绍了如何将 3DR Radio v1 连接到飞行控制器。你还应阅读 SiK Radio v2,其中包含更详细的用户指南和功能列表。 1 概述 3DR 无线电设备是在自动驾驶仪和地面站之间建立遥测连接的最简单方法。 3DR…

HarmonyOS应用事件打点开发指导

简介 传统的日志系统里汇聚了整个设备上所有程序运行的过程流水日志,难以识别其中的关键信息。因此,应用开发者需要一种数据打点机制,用来评估如访问数、日活、用户操作习惯以及影响用户使用的关键因素等关键信息。 HiAppEvent 是在系统层面…

宋仕强论道之华强北存在的价值(二十九)

华强北特点是小快灵,主要服务散布在世界各地游离态的小体量硬件研发生产企业,这种企业也很难找到大一点的供应商来配套,以前覆盖珠三角长三角,现在是辐射世界各地。华强北是一个大集散地,据华强电子网统计,…

ubuntu 18.04 共享屏幕

用于windows远程ubuntu 1. sudo apt install xrdp 2. 配置 sudo vim /etc/xrdp/startwm.sh 把最下面的test和exec两行注释掉,添加一行 gnome-session 3.安装dconf-editor : sudo apt-get install dconf-editor 关闭require encrytion org->gnome->desktop…

【数据结构】五、数组与广义表

目录 一、定义 二、计算数组元素地址 三、稀疏矩阵快速转置 稀疏矩阵的表示 稀疏矩阵快速转置 四、广义表 一、定义 我们所熟知的一维、二维数组的元素是原子类型。广义表中的元素除了原子类型还可以是另一个线性表。当然所有的数据元素仍然属于同一类型。 这里的数组可…

深圳市城市更新区域关注程度分析数据,tiff格式,附数据可视化,精细到区县

基本信息. 数据名称: 深圳市城市更新区域关注程度分析数据 数据格式: tiff 时间版本:2022年 数据几何类型: 无 数据精度:区县 数据坐标系: WGS84 数据来源:网络公开数据 数据可视化. www.bajidata.com

微信小程序-textarea组件字数实时更新

一、前言 本文实现的是在小程序中&#xff0c;textarea文本框输入文字后&#xff0c;实时显示文字的字数&#xff0c;获取更好的用户输入体验以及提示。 下图是实现的效果 二、代码实现 2-1、wxml代码 <view style"padding: 30rpx;"><view style"…

【已解决】解决Springboot项目访问本地图片等静态资源无法访问的问题

今天在开发一个招聘系统的时候&#xff0c;有投递简历功能&#xff0c;有投递就会有随之而来的查看简历对吧&#xff0c;我投递过的简历&#xff0c;另存为一个文件夹&#xff0c;就是说本地磁盘(或者服务器)有一个专门存放投递过的简历的文件夹&#xff0c;用于存放PDF&#x…

Java最全面试题专题---5、Spring面试题(1)

Spring概述&#xff08;10&#xff09; 什么是spring? Spring是一个轻量级Java开发框架&#xff0c;最早有Rod Johnson创建&#xff0c;目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack&#xff08;一站式&#xff…

【jvm从入门到实战】(十) 实战篇-内存调优

内存溢出和内存泄漏&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;这个对象就不会被垃圾回收器回收&#xff0c;这种情况就称之为内存泄漏。内存泄漏绝大多数情况都是由堆内存泄漏引起的。少量的内存泄漏可以容忍&#x…

基于Linphone android sdk开发Android软话机

1.Linphone简介 1.1 简介 LinPhone是一个遵循GPL协议的开源网络电话或者IP语音电话&#xff08;VOIP&#xff09;系统&#xff0c;其主要如下。使用linphone&#xff0c;开发者可以在互联网上随意的通信&#xff0c;包括语音、视频、即时文本消息。linphone使用SIP协议&#…

云原生系列3-Kubernetes

1、Kubernetes概述 k8s缩写是因为k和s之间有八个字符。k8s是基于容器技术的分布式架构方案。官网&#xff1a;https://kubernetes.io/zh-cn/ Google在 2014年开源了Kubernetes项目&#xff0c;Kubernetes是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。同样类似的…

拥抱鸿蒙 - 在展讯T606平台上的探索与实践

前 言 自OpenHarmony 问世后受到了社会各界的广泛关注&#xff0c;OpenHarmony 的生态系统在如火如荼的发展。 酷派作为一家积极拥抱变化的公司&#xff0c;经过一段时间的探索与实践&#xff0c;成功实现将OpenHarmony 系统接入到展讯平台上&#xff0c;我们相信这是一个重要…

华为麒麟系统与鸿蒙系统:发展历程、问题解决与未来展望

导言 华为作为全球领先的科技企业&#xff0c;其自主研发的麒麟系统和鸿蒙系统备受瞩目。本文将深入研究这两者的发展历程、遇到的问题、解决过程&#xff0c;探讨未来的可用范围以及在全球的应用和研究趋势&#xff0c;进一步探讨在哪些方面能取胜&#xff0c;并在哪些领域发力…

芯知识 | WT2003HP8-32N语音芯片采用QFN32形式小体积封装的应用优势介绍

唯创知音WT2003HP8-32N高品质MP3音频语音芯片&#xff0c;以其QFN32&#xff08;44毫米&#xff09;封装的应用优势&#xff0c;在音频处理领域独树一帜。这款芯片不仅体积小巧&#xff0c;而且功能强大&#xff0c;适用于多种应用场景。 一、高品质音频处理 唯创知音WT2003HP…

阿里云ECS配置IPv6后,如果无法访问该服务器上的网站,可检查如下配置

1、域名解析到这个IPv6地址,同一个子域名可以同时解析到IPv4和IPv6两个地址&#xff0c;这样就可以给网站配置ip4和ipv6双栈&#xff1b; 2、在安全组规则开通端口可访问&#xff0c;设定端口后注意授权对象要特殊设置“源:::/0” 3、到服务器nginx配置处&#xff0c;增加端口…

pip 常用指令 pip download 命令用法介绍

pip download 是一个用于从Python包索引(PyPI)下载Python包的命令行工具。它可以下载特定版本的包&#xff0c;或者下载满足特定条件的所有包。 命令 pip download 的参数包括 -d 或 --dest&#xff1a;指定下载文件的保存路径。-r 或 --requirement&#xff1a;从一个需求文…

百度侯震宇详解:大模型将如何重构云计算?

12月20日&#xff0c;在2023百度云智大会智算大会上&#xff0c;百度集团副总裁侯震宇以“大模型重构云计算”为主题发表演讲。他强调&#xff0c;AI原生时代&#xff0c;面向大模型的基础设施体系需要全面重构&#xff0c;为构建繁荣的AI原生生态筑牢底座。 侯震宇表示&…

Java|IDEA 中添加编译参数 --add-exports

方法1 File > Settings > Build, Execution, Deployment > Compiler > Java Compiler > Javac Options > Override compiler parameters per-module 点击&#xff1a; 点击OK 双击Compliation options&#xff0c;输入后回车&#xff1a; 方法2 找到出错…

快速搭建Grafana Promethus 服务器监控系统

该文参考文章&#xff0c;其中又遇到一些问题&#xff0c;并解决&#xff0c;当前主要为了记录一下 探针 Grafana Prometheus 之比 Docker 更简单的部署流程 - 承飞之咎本文重在 Grafana Prometheus 探针 方案的部署流程&#xff0c;介绍和更多使用请到&#xff1a;探针 ̵……