Windows下基于VSCode搭建C++开发环境(包含整合MinGW64、CMake的详细流程)

news2024/9/29 9:23:58

最近想写写C++,装了VisualStudio 2022,折腾半天。对于一个用惯VSCode的人来说,总感觉IDE太笨重。于是自己网上各种查资料,自己琢磨,搭建了一套Windows下基于VSCode和CMake的C++轻量级开发环境。

具体搭建步骤

1. 下载并安装VSCode

VSCode下载地址(AzureCDN加速地址)
首先同意安装协议:
在这里插入图片描述
下一步,方便起见全部都勾上:
在这里插入图片描述
之后点击安装即可:
在这里插入图片描述

2. 安装必要的VSCode插件

这里推荐安装Microsoft官方提供的Chinese简体中文汉化包、C/C++、C/C++ Extension Pack三个插件,C/C++ Extension Pack扩展会自动为我们安装CMake、CMake Tools等插件。
在这里插入图片描述

3. 下载并解压MinGW64、CMake

MinGW全称是Minimalist GNU on Windows,也就是将Linux/Unix环境下赫赫有名的GCC编译器以及其相关的编译调试组件移植到了Windows上。通过这个工具集我们就可以编译、调试、运行和打包C/C++项目了。
MinGW64下载地址(github最新版 gcc 13.1.0)
github下载慢的话可以考虑GitHub文件加速:https://ghproxy.com

下载完成后解压到某个指定的目录即可 (记住这个目录,后面会用到)
在这里插入图片描述
之后下载CMake,CMake是一款现代化的C++编译打包工具,很多开源的C/C++都在用。个人感觉有点像Java的Maven构建工具,但功能没有Maven那么齐全。CMake下载地址(CMake官网最新版3.27.0)

下载完成后一样,解压到某个指定的目录下即可 (同样也要记住这个目录)
在这里插入图片描述

最后的重头戏就是用以上两个解压目录配置环境变量啦,打开设置->系统->系统信息:
在这里插入图片描述
点击系统信息->高级系统设置:
在这里插入图片描述
点击环境变量:
在这里插入图片描述
选择上下两个Path都可
在这里插入图片描述
安装目录\bin 配置在Path变量中,之后一路点击确定就大功告成了!
在这里插入图片描述

4. 添加.vscode目录下的配置

使用VSCode打开一个空文件夹,创建一个叫做 .vscode 的文件夹 (注意前面有个英文句号.不要漏掉了),分别创建c_cpp_properties.json、settings.json、launch.json和tasks.json四个文件,文件内容如下:

  • c_cpp_properties.json

    {
        "configurations": [
            {
                "name": "Win32",
                "includePath": [
                    "${workspaceFolder}/**"
                ],
                "defines": [
                    "_DEBUG",
                    "UNICODE",
                    "_UNICODE"
                ],
                "windowsSdkVersion": "10.0.17763.0",
                "compilerPath": "C:\\Users\\22820\\apps\\mingw64\\bin\\g++.exe",  // 此处指定自己安装的g++.exe地址
                "cStandard": "c11",
                "cppStandard": "c++11",
                "intelliSenseMode": "${default}",
                "configurationProvider": "ms-vscode.cmake-tools"
            }
        ],
        "version": 4
    }
    
  • settings.json

    {
      "cmake.cmakePath": "C:\\Users\\22820\\apps\\cmake-3.27.0\\bin\\cmake.exe" // 此处指定自己安装的cmake.exe地址
    }
    
  • launch.json

    {
        // 使用 IntelliSense 了解相关属性。 
        // 悬停以查看现有属性的描述。
        // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "name": "(gdb) 启动",
                "type": "cppdbg",
                "request": "launch",
                "program": "${workspaceFolder}/build/cpp_learn", // build后面加CMakeLists.txt中project()中配置的项目名(CMakeLists.txt后文会介绍)
                "args": [],
                "stopAtEntry": false,
                "cwd": "${workspaceFolder}",
                "environment": [],
                "externalConsole": false,
                "MIMode": "gdb",
                "setupCommands": [
                    {
                        "description": "为 gdb 启用整齐打印",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    },
                    {
                        "description": "将反汇编风格设置为 Intel",
                        "text": "-gdb-set disassembly-flavor intel",
                        "ignoreFailures": true
                    }
                ],
                "preLaunchTask":"Build",
                "miDebuggerPath": "C:\\Users\\22820\\apps\\mingw64\\bin\\gdb.exe" // 此处指定自己安装的gdb.exe地址
            }
        ]
    }
    
  • tasks.json

    {
        // See https://go.microsoft.com/fwlink/?LinkId=733558
        // for the documentation about the tasks.json format
        "version": "2.0.0",
        "options": {
            "cwd":"${workspaceFolder}/build"
        },
        "tasks": [
            {
                "label": "cmake",
                "type": "shell",
                "command": "cmake",
                "args":[
                    ".."
                ]
            },
            {
                "label":"mingw32-make",      // windows下用mingw32-make,Linux/Unix下直接使用make
                "group":{
                    "kind": "build",
                    "isDefault": true
                },
                "command":"mingw32-make",
                "args": [
     
                ]
            },
            {
                "label":"Build",
                "dependsOrder": "sequence",
                "dependsOn":[
                    "cmake",
                    "mingw32-make"
                ]
            }
        ]
    }
    

5. 创建CMakeLists.txt文件,编写main.cpp测试

在项目的根目录下创建CMakeLists.txt(相当于Maven的pom.xml),具体内容不要细究,先抄我的:

cmake_minimum_required(VERSION 3.15)   # 指定cmake最小版本
project(cpp_learn)                     # 指定项目名称
include_directories(cpp_learn include) # 指定头文件目录
aux_source_directory(cpp_learn src)    # 指定源文件目录
add_executable(cpp_learn src/main.cpp) # 指定程序入口

之后分别创建main.h和main.cpp到根目录下的include文件夹和src文件夹中:
在这里插入图片描述
之后退出VSCode重新进一次就会发现CMake已经开始工作了,在项目根目录下生成了build文件夹,里面就是要编译的内容。其中cpp_learn.exe就是最终编译的产物。
在这里插入图片描述

还支持gdb打断点调试哦,打好断点点下面的小虫子(或者按F5)就可以开始调试了!
在这里插入图片描述

总结

通过使用VSCode搭建C++环境也不是一件很容易的事情呐!不过对于开发者来说,敢于尝试敢于瞎折腾才是最重要的,要有小马过河的精神嘛。不过话说回来这样一搞终于可以摆脱Visual Studio 2022那个笨重的家伙了hhh,而且VSCode还可以自定义颜色主题,对于我这种颜控来说简直不要太舒适~~

小彩蛋

VSCode好看的主题推荐:

  • Darcula Theme:仿照JetBrains全家桶(Intellij IDEA、Web Storm、PyCharm等)的配色,属于是对经典的复刻了
    在这里插入图片描述
  • One Dark Pro:VSCode最受欢迎的主题之一,清爽提神抗疲劳,深受广大程序员的青睐
    在这里插入图片描述
  • Atom One:有浅色和深色两款主题可供选择!而且都很好康哦
    在这里插入图片描述
    在这里插入图片描述

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

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

相关文章

golang 冒号等于号 := 的注意事项和全局和局部变量的使用

全局变量错误用法: 全局变量正确用法:

ChatGPT应用探索:自动文本生成的无限可能

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

基于一致性引导的元学习bootstraping半监督医学图像分割

文章目录 Consistency-guided Meta-Learning for Bootstrapping Semi-Supervised Medical Image Segmentation摘要本文方法实验结果 Consistency-guided Meta-Learning for Bootstrapping Semi-Supervised Medical Image Segmentation 摘要 医学成像取得了显著的进步&#xf…

3.Java面试题—JVM基础、内存管理、垃圾回收

七、JVM 一、JVM 基础 一篇文章掌握整个JVM,JVM超详细解析!!! 什么是Java虚拟机? Java虚拟机(JVM) 是用来 解析和运行Java程序 的一种 虚拟机。编译器 将 Java ⽂件 编译成 平台无关 的 Java 字节码文件 (.class),…

嵌入式:QT Day1

一、手动实现登录框 源码&#xff1a; widge.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> //用于打印输出 #include <QIcon> //图标头文件 #include <QPushButton> //按钮类头文件 #includ…

Hadoop 之 Spark 配置与使用(五)

Hadoop 之 Spark 配置与使用 一.Spark 配置1.Spark 下载2.单机测试环境配置3.集群配置 二.Java 访问 Spark1.Pom 依赖2.测试代码1.计算 π 三.Spark 配置 Hadoop1.配置 Hadoop2.测试代码1.统计字符数 一.Spark 配置 环境说明环境版本AnolisAnolis OS release 8.6Jdkjava versi…

【node.js】01-fs读写文件内容

目录 一、fs.readFile() 读取文件内容 二、fs.writeFile() 向指定的文件中写入内容 案例&#xff1a;整理txt 需求&#xff1a; 代码&#xff1a; 一、fs.readFile() 读取文件内容 代码&#xff1a; //导入fs模块&#xff0c;从来操作文件 const fs require(fs)// 2.调…

ClickHouse(一):ClickHouse介绍及OLAP场景特征

目录 1. ClickHouse与其特性 ​​​​​​​2. 什么是ClickHouse ​​​​​​​3. OLAP场景的特征 进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; ​​​​​​​1. ClickHouse与其特性 …

刷题小总结

数组 数组是存放在连续内存空间上的相同类型数据的集合。 经典题目&#xff1a; 二分查找 双指针法 滑动窗口 模拟行为 链表 链表的种类主要为&#xff1a;单链表&#xff0c;双链表&#xff0c;循环链表链表的存储方式&#xff1a;链表的节点在内存中是分散存储的&…

php项目内存飚高处理与优化

公司服务器最近内存占用超过阈值一直报警 经过排查,内存占用很多&#xff0c;剩余很少 free -m 排查代码无太多冗余和缓存 最后和运维一起排查&#xff0c;发现宝塔安装后带的gitlab的进程很吃内存&#xff0c;赶紧停用&#xff0c;并卸载无用的软件 最后内存降下来了

大数据Flink(四十九):框架版本介绍和编程语言选择

文章目录 框架版本介绍和编程语言选择 一、框架版本介绍 二、编程语言选择 框架版本介绍和编程语言选择

Udp编程 - 客户端和服务端的注意事项

网上有很多教程&#xff0c;他们说发送使用sendto,接收使用recvfrom就可以&#xff0c;确实如此。但是你会用吗? 我们以QT(C)为例,来使用这个udp实现自发自收的功能(途中我们会用到QThread来开启我们的线程) 服务端(线程) #include "udpserverthread.h" #include …

MySQL数据库配置及创建用户和授权

注意&#xff1a; 都是基于MySQL8.0以上版本 1、检查是否安装过sql [rootlocalhost ~]# rpm -[qa](https://so.csdn.net/so/search?qqa&spm1001.2101.3001.7020) | grep mysql[rootlocalhost ~]# rpm -qa | grep [mariadb](https://so.csdn.net/so/search?qmariadb&…

Day 66-68 主动学习之ALEC

代码&#xff1a; package dl;import java.io.FileReader; import java.util.*; import weka.core.Instances;/*** Active learning through density clustering.*/ public class Alec {/*** The whole dataset.*/Instances dataset;/*** The maximal number of queries that …

修改密码和再次确认密码的js和element-ui的使用

<template><div><!-- plan的插槽 --><plan title"修改密码"><!-- 插槽的名字 --><span slot"header">修改密码</span><el-form:model"ruleForm2"status-icon:rules"rules2"ref"rul…

微服务安全简介

​由于其可扩展性、灵活性和敏捷性&#xff0c;微服务架构已经变得越来越受欢迎。然而&#xff0c;随着这种架构的分布和复杂性增加&#xff0c;确保强大的安全措施变得至关重要。微服务的安全性超越了传统的方法&#xff0c;需要采用全面的策略来保护免受不断演变的威胁和漏洞…

Linuxの Shell 函数、$(())、$( )、``与${ }

删除 # 标准定义 function funName () {....[return int;]}# 简写 function 可以省略 funName () {....[return int;] }# 简写 &#xff08;&#xff09; 可以省略 function funName {....[return int;] }## 函数调用 # 直接 函数名即可 无参数 funName # 参数 函数名即…

基本排序算法

目录 一&#xff0c;插入排序 二&#xff0c;希尔排序 三&#xff0c;选择排序 四&#xff0c;冒泡排序 五&#xff0c;快排 5.1 Hoare法 5.2 挖坑法 5.3 指针法 5.4 非递归写法 六&#xff0c;归并排序 6.1 递归 6.2 非递归 一&#xff0c;插入排序 基本思想&…

蓝牙HID配对过程

配对通常调用分两步 &#xff11;. Bluetooth AdapterService.cancelDiscovery btif_dm_cancel_discovery BTfM_CancelInquiry BTA_DM_SEARCH_CANCEL_CMPL_EVT BTM_BLI_INQ_CANCEL_EVT BTM_BLI_INQ_DONE_EVT discovery_state_changed_cb btif_dm_cancel_discovery BTA_DM_SE…

ElasticSearch学习--自动补全

目录 自定义分词器 介绍 配置自定义分词器 拼音分词器的问题​编辑 总结 DSL自动补全查询 RestAPI实现自动补全 自定义分词器 介绍 自定义分词器只在当前库中有效 配置自定义分词器 拼音分词器的问题 总结 DSL自动补全查询 RestAPI实现自动补全