Windows上使用vscode配置C/C++编译环境

GCC和GDB

一句话概括:gcc用来编译C,gdb用来调试C。

  • GCC (GNU Compiler Collection)

GCC(GNU编译器套件)是一个由GNU项目开发的编译器系统,支持多种编程语言,如C、C++、Objective-C、Fortran、Ada和Go等。GCC是自由软件,遵循GNU通用公共许可证(GPL)。它最初是为GNU操作系统开发的,但现在几乎所有类Unix系统,包括Linux,都在使用GCC。

  • GDB (GNU Debugger)

GDB(GNU调试器)是一个由GNU项目开发的调试工具,用于调试程序的运行和排除错误。GDB支持多种编程语言,如C、C++、Fortran、Ada和Pascal等。它也遵循GNU通用公共许可证(GPL)。

MinGW-w64(Minimalist GNU for Windows, 64-bit)

是一个用于在Windows操作系统上开发和运行原生Windows应用程序的编译器套件。它是MinGW(Minimalist GNU for Windows)的扩展版本,支持64位系统,并增加了一些额外的功能。

组成部分

  1. GCC编译器:用于将源代码编译成可执行文件。
  2. binutils:包含链接器、汇编器等工具。
  3. 运行时库:提供标准C库、C++库和其他必要的运行时库。
  4. 头文件和链接库:用于支持Windows API的开发。

安装

MinGW-w64可以通过多种方式安装,如通过msys2、官方安装包或者其他包管理工具。

MinGW-w64 - for 32 and 64 bit Windows download | SourceForge.net可以直接使用这个网址去下载,但是我使用的Windows电脑,下载不了,所以我使用另一种方式下载,如果你可以下载,后续配置gcc和gdb都是相同的步骤,只是下载方式不一样。

以下是通过msys2安装MinGW-w64的步骤:

下载 MSYS2

 MSYS2下载步骤根据官网来,记住下载的位置。

更新软件包数据库和基本系统

  • 打开 MSYS2 Shell(在开始菜单中找到 MSYS2 MinGW 64-bit)。
  • 运行以下命令更新软件包数据库和基本系统:
pacman -Syu

安装 GCC 和 GDB

pacman -S mingw-w64-ucrt-x86_64-gccpacman -S mingw-w64-ucrt-x86_64-gdb

配置环境变量

  1. 打开系统属性

    • Win + R 键,输入 sysdm.cpl 并按 Enter。
    • 或者直接搜索系统环境变量。
  2. 编辑环境变量

    • 在“系统属性”窗口中,点击“高级”选项卡,然后点击“环境变量”。
    • 在“系统变量”部分,找到并选择 Path,然后点击“编辑”。
    • 点击“新建”,添加 MSYS2 的 bin 目录路径,例如:
C:\msys64\mingw64\bin

验证路径配置

  1. 打开命令提示符

    • Win + R 键,输入 cmd 并按 Enter。
  2. 检查 GCC 和 GDB 版本

    • 在命令提示符中输入以下命令,并按 Enter:如果路径配置正确,你应该会看到 GCC 和 GDB 的版本信息。
gcc --version
gdb --version

在 VS Code 中配置 GCC 和 GDB

安装 C/C++ 扩展

  • 打开 VS Code。
  • 点击左侧活动栏中的扩展图标(或按 Ctrl+Shift+X)。
  • 在搜索框中输入 C/C++,选择由 Microsoft 提供的 C/C++ 扩展并安装。

1. 创建任务配置文件

  1. 打开 VS Code

    • 打开你的工作区或创建一个新的文件夹。
  2. 创建 tasks.json 文件

    • 在 VS Code 中,打开命令面板(按 Ctrl+Shift+P),输入 Tasks: Configure Task 并选择它。
    • 选择 Create tasks.json file from template,然后选择 Others
  3. 编辑 tasks.json 文件

    • 在工作区根目录的 .vscode 文件夹中,编辑 tasks.json 文件,添加以下内容:
{"version": "2.0.0","tasks": [{"label": "Build C Program",          // 任务标签,用于在 VS Code 中选择任务"type": "shell",                     // 任务类型,这里是 shell 命令"command": "gcc",                    // 要运行的命令,这里是 GCC 编译器"args": [                            // 传递给命令的参数列表"-g",                              // 生成调试信息"${file}",                         // 要编译的源文件"-o",                              // 输出文件选项"${fileDirname}\\${fileBasenameNoExtension}.exe"  // 输出可执行文件的路径和名称],"group": {                           // 任务分组"kind": "build",                   // 任务类型,这里是构建任务"isDefault": true                  // 是否是默认任务},"problemMatcher": ["$gcc"],          // 用于解析 GCC 编译器输出的错误和警告"detail": "Generated task to build C program using gcc"  // 任务的详细描述}]
}
 

2. 配置调试器

  1. 创建 launch.json 文件

    • 在 VS Code 中,打开命令面板(按 Ctrl+Shift+P),输入 Debug: Open launch.json 并选择它。
    • 如果没有 launch.json 文件,选择 C++ (GDB/LLDB)
  2. 编辑 launch.json 文件

    • .vscode 文件夹中,编辑 launch.json 文件,添加以下内容:
{"version": "0.2.0","configurations": [{"name": "Launch",                            // 调试配置的名称"type": "cppdbg",                            // 调试器类型(用于 C++ 调试)"request": "launch",                         // 调试请求类型,这里是启动程序"program": "${fileDirname}\\${fileBasenameNoExtension}.exe", // 要调试的程序路径"args": [],                                  // 启动程序时的命令行参数"stopAtEntry": false,                        // 是否在程序入口处停下"cwd": "${workspaceFolder}",                 // 程序的工作目录"environment": [],                           // 环境变量"externalConsole": false,                     // 是否使用外部控制台运行程序"MIMode": "gdb",                             // 调试模式,这里是使用 GDB"setupCommands": [                           // 调试器启动前执行的命令{"description": "Enable pretty-printing for gdb",  // 命令描述"text": "-enable-pretty-printing",      // 启用 GDB 的漂亮打印"ignoreFailures": true                  // 忽略失败}],"preLaunchTask": "Build C Program",          // 调试前执行的任务,这里是编译程序"miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe",  // GDB 调试器路径"logging": {"engineLogging": true                     // 启用引擎日志记录}}]
}

3. 检查代码

创建一个hello.c的文件,这里最容易出的错就是头文件找不到。
#include <stdio.h>int main() {printf("Hello, World!\n");return 0;
}

常见问题解决

  • 路径错误:确保路径使用双反斜杠 \\ 或单斜杠 /
  • 环境变量:确保 Path 中包含 C:/msys64/mingw64/bin
  • 文件找不到的问题通常是由于 IntelliSense 未正确配置导致的,以下是解决办法
配置 IntelliSense
创建 c_cpp_properties.json
  1. 打开 VS Code 并进入工作区
  2. 打开命令面板(按 Ctrl+Shift+P),输入 C/C++: Edit Configurations (UI) 并选择它。
  3. 如果提示创建 c_cpp_properties.json 文件,选择 Yes
  4. .vscode 文件夹中找到 c_cpp_properties.json 文件,添加或修改如下配置:
{"configurations": [{"name": "Win32",                     // 配置名称,可以在 VS Code 中选择这个配置"includePath": [                     // 头文件搜索路径"${workspaceFolder}/**",           // 当前工作区文件夹中的所有子文件夹"C:/msys64/mingw64/include",       // MSYS2 MinGW 64 的头文件路径"C:/msys64/usr/include",           // MSYS2 用户头文件路径"C:/msys64/mingw64/x86_64-w64-mingw32/include"  // MSYS2 MinGW 64 特定的头文件路径],"defines": [                         // 预定义的宏"_DEBUG",                          // 表示调试模式"UNICODE",                         // 使用 Unicode 字符集"_UNICODE"                         // 使用 Unicode 字符集],"windowsSdkVersion": "10.0.18362.0", // Windows SDK 版本"compilerPath": "C:/msys64/mingw64/bin/gcc.exe",  // 编译器路径"cStandard": "c11",                  // C 语言标准版本"cppStandard": "c++17",              // C++ 标准版本"intelliSenseMode": "windows-gcc-x64"  // IntelliSense 模式,这里是 Windows 上的 GCC x64}],"version": 4                             // 配置文件版本
}

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

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

相关文章

ARM32开发-fat_fs文件系统

FAT_FS 文件系统 FAT (File Allocation Table) 文件系统是一种广泛使用的基于磁盘的文件系统,尤其适用于小型嵌入式系统和存储卡。FAT_FS 就是一个专门针对 FAT 文件系统的开源实现。 FAT_FS 的主要特点 轻量级和高度可移植: FAT_FS 是一个非常轻量级的文件系统实现,占用资源少…

人脸识别考勤机给企业带来了哪些好处

人脸识别考勤机给企业带来了哪些好处 随着考勤软件在国内各企业中逐渐使用&#xff0c;人们对于考勤的这种方式已不再生疏&#xff0c;传统的纸质签到、指纹打卡已因存在不灵敏、易作弊、难统计等诸多弊病&#xff0c;逐步被可以管理考勤的手机软件索取代&#xff1b; 近些…

【网络安全的神秘世界】渗透之信息收集流程

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 渗透测试之信息收集 切记&#xff1a;搜索到敏感信息之后&#xff0c;不要随意下载和传播&#xff0c;属于违法行为&#xf…

如何基于ITIL构建有效的IT服务管理体系

在数字经济时代&#xff0c;IT服务管理已成为企业运作的核心支撑。随着信息技术的快速发展和应用&#xff0c;企业对IT服务的需求不断增加&#xff0c;而如何高效地管理这些服务成为一个重要挑战。基于ITIL&#xff08;信息技术基础架构库&#xff09;构建有效的IT服务管理体系…

Virtualbox7.0版本安装报错:Invalid installation directory

错误情况 我在安装virtualbox最新版7.0.18时候&#xff0c;因为默认安装在C盘&#xff0c;我改成了E盘&#xff0c;然后就报错 Invalid installation directory The chosen installation directory is invalid, as it does not meet the security requirements. Refer to th…

那些年我为了考PMP踩过的坑.....

说到考PMP我尊嘟很难过且伤心&#xff0c;众所周知&#xff0c;报考PMP都是要报机构的而且还是PMI认证的机构&#xff0c;所以在报考PMP过程中选的机构我可以说踩过了很多坑了...... Q&#xff1a;包过吗&#xff1f; 大家千万不要信某某机构说的包过噱头&#xff0c;真的很坑…

4000字读懂实时数仓的过去现在和未来(建议收藏)

1991年&#xff0c;比尔恩门&#xff08;Bill Inmon&#xff09;出版了他的第一本关于数据仓库的书《Building the Data Warehouse》&#xff0c;标志着数据仓库概念的确立。 我们所常说的企业数据仓库Enterprise Data Warehouse (EDW) &#xff0c;就是一个用于聚合不同来源的…

【嵌入式】嵌入式Linux开发实战指南:从交叉编译到触摸屏交互

文章目录 前言&#xff1a;1.简介1.1. 交叉编译工具1.2. 项目开发流程&#xff1a;1.3. ARM开发板的连接方法 2. 开发板连接3. 系统文件 IO4. 设置共享文件夹3.1. 读文件3.2. 写文件3.2. 设置文件偏移量 4. LCD显示屏显示4.1. LCD 显示颜色4.2. 将文件下载到开发板4.2.1. 在CRT…

002.Linux CentOS7 安装

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

Git Extensions gui工具差异显示乱码

某些IDE例如KEIL等默认编码格式为GB2312&#xff0c;而git extensions默认utf-8&#xff0c;如果不想修改文件格式为utf-8的话就修改git extensions格式为GB2312。 默认是没有chines 这个选项的&#xff0c;我这里是已经添加好的。方法为上方工具栏->设置->Git->设置…

Linux C编译器从零开发三

AST语法树 BNF抽象 expr equality equality relational ("" relational | "!" relational)* relational add ("<" add | "<" add | ">" add | ">" add)* add mul ("" …

为什么很多Java程序员会下意识觉得Java的就是最好的?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;做为一个真正热爱编程&#…

【并发程序设计】总篇集 Linux下 C语言 实现并发程序

11_Concurrent_Programing 文章目录 11_Concurrent_Programing1.进程概念进程内容进程类型进程状态 2.进程常用命令进程信息命令top 命令进程信息表 进程优先级命令nice 命令renice 命令 后台进程命令 3.子进程创建子进程fork 函数 结束进程exit 函数_exit 函数 回收子进程wait…

功能测试 之 单模块测试----抢购模块

1.先测后台&#xff0c;再测前台 面试题1: 当你发现研发实现的结果与需求不一致时怎么办? 需求评审的时候&#xff1a;需要确认所有输入类型的校验是针对单独的输入框做的还是在最终提交时校验 抢购模块&#xff1a;需求跟实现的内容不一致 (跟产品和研发一起确认。研发为什…

【Python教程】如何搭建一个高效的Python开发环境?结尾附安装包直通车

前言&#xff1a; Python 丰富的函数库和组件库是这门语言强大的核心原因&#xff01;但我们不可能去记忆所有的方法名和参数名&#xff0c;往往只能记住一些常用的或者某个方法开头的几个字母。这个时候一个好的开发工具就需要能聪明地“猜”出你想输入的代码&#xff0c;并给…

Java数据结构与算法——稀疏数组和队列

一、稀疏数组sparsearray数组 该二维数组的很多值是默认值0,因此记录了很多没有意义的数据&#xff0c;可以采用稀疏数组进行压缩 1.基本介绍: 当一个数组中大部分元素为0&#xff0c;或者为同一个值的数组时&#xff0c;可以使用稀疏数组来保存该数组。 稀疏数组的处理方法…

深入解析Linux权限管理:从基本原理到应用

目录 Shell 命令及运行原理 Shell 与 Kernel Linux 权限的概念 命令提示符 Linux 权限管理 1. 访问者的分类 ugo 2. 类型和访问权限 3. 权限值表示方法 4. chmod 访问权限设置 掩码命令&#xff1a;umask 5.目录权限 粘滞位&#xff1a; 文章手稿见文末 Shell 命令…

Unity OpenCVForUnity 安装和第二个案例详解 <二>

目录 一、前言 二、场景介绍 1.WebCamTextureToMatExample脚本 2.FpsMonitor脚本 三、 结构体Scaler 四、找到相机并使用 1.相机的启用 2.格式转换 a.把webCamTexture转换成Mat b.把Mat转换成Texture2D 五、脚本组合 六、作者的碎碎念 一、前言 第二个案例&#xf…

大语言模型的昨天、今天和明天

引言 近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术突飞猛进&#xff0c;其中大语言模型&#xff08;LLM&#xff09;无疑是最引人瞩目的技术之一。从OpenAI的GPT系列到Meta的Llama模型&#xff0c;大语言模型的发展不仅改变了人们对AI的认知&#xff0c;也在各行…

通过防抖动代码解决ResizeObserver loop completed with undelivered notifications.

通过防抖动代码解决ResizeObserver loop completed with undelivered notifications. 一、报错内容二、解决方案解释&#xff1a; 一、报错内容 我通过el-tabs下的el-tab-pane切换到el-table出现的报错&#xff0c;大致是渲染宽度出现了问题 二、解决方案 扩展原生的 Resiz…