VS Code构建C/C++开发环境(Windows with MinGW and CMake)

文章目录

  • 目的
  • 编译工具链
  • 基础开发与调试
  • 基于CMake开发与调试
  • 关于settings.json
  • 总结

目的

在Windows上进行C/C++开发目前最最常用的IDE就是微软的 Visual Studio ,只是对我来说早些年的VS实在是太卡了,留下了不好的印象。后来没怎么用过,现在下了用起来也不怎么习惯,相对来说我还是喜欢更轻量的方式进行开发。这篇文章将记录在VS Code中构建C/C++开发环境的一些内容。

VS Code中构建C/C++开发环境进行开发的方法官方是有文档进行说明的,可以参考下面链接:
https://code.visualstudio.com/docs/languages/cpp
https://code.visualstudio.com/docs/cpp/introvideos-cpp

编译工具链

Windows上进行C/C++开发需要有合适的编译工具链,流行的有MSVC(微软出品)和MinGW(GCC的一个实现)。

这里使用MSYS2(提供了命令行、包管理器等工具)来安装MinGW-w64(64位版本)。首先去MSYS2官网下载软件: https://www.msys2.org/ 。安装完成后打开MSYS2-UCRT64的命令行界面,输入下面命令下载MinGW-w64:

pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain

下载完成后需要添加MinGW-w64到环境变量,如果未修改过目录应该是 C:\msys64\ucrt64\bin
在这里插入图片描述

添加完成后应该就可以在命令窗口中使用了:
在这里插入图片描述

如果下载有问题也可以直接去MinGW-w64官网下载已经编译好的工具链:https://www.mingw-w64.org/
如果对下载的版本选择有问题可以参考文章:https://blog.csdn.net/weixin_43684214/article/details/136624735

基础开发与调试

有了工具链后,在VS Code中开发C/C++需要安装C/C++的扩展:
在这里插入图片描述

之后就可以进行基础的开发了,下面代码编译(Run)就可以生成可执行文件:
在这里插入图片描述

上图代码为:

#include <iostream>int main()
{std::cout << "Hello Naisu!" << std::endl;
}

如果右上角没有调试编译的按钮可以在VS Code的设置中调出来:
在这里插入图片描述

编译没问题就可以进行调试(Debug),记得先打上断点:
在这里插入图片描述

最基础的开发和调试就是上面这样了,另外在VS Code中可以通过一些配置文件来对整个过程进行更加细致的配置:

  • tasks.json 编译后会生成这个文件,该文件描述了编译过程命令,可以修改该文件调整编译行为,比如编译前后动作、要编译哪些文件、编译生成什么文件等;
  • launch.json 该文件可以通过右上角调试按钮右边的配置按钮生成,该文件描述了调试时的行为,比如 "stopAtEntry": true, 进入调试时就会停在入口处,"externalConsole": true, 调试的程序就会打开独立的窗口;
  • c_cpp_properties.json 该文件可以按 Ctrl+Shift+P 然后选择 C/C++: Edit Configurations(UI或JSON) 生成。该文件影响代码编写时智能提示等功能,还有不在当前工作目录下载需要引用的头文件或库的路径等;

在这里插入图片描述

基于CMake开发与调试

首先需要去CMake官网下载并安装:https://cmake.org/

安装完成后可以在命令窗口使用cmake:
在这里插入图片描述

VS Code中需要安装相应的拓展:
在这里插入图片描述

使用CMake的话只要项目目录下有 CMakeLists.txt 文件,这个可以自己新建也可以按VS Code的文档来,按 Ctrl+Shift+P 选择 CMake: Quick Start 来进行配置(注意配置时项目名称不能和cmake关键词重复,比如test):
在这里插入图片描述
按照设置下来还会生成 CMakePresets.json 文件,该文件描述了项目使用的工具链等。如果没有该文件也可以通过选择 CMake: Select Configure Preset 来配置。

配置完成后就可以用CMake工具进行编译和调试了:
在这里插入图片描述
除了侧边栏工具界面,底部的工具栏中也可以进行编译调试等工作。

至此本文主要要描述的内容都已完成。

关于settings.json

前面的图中可以看到 .vscode 目录下有一个 settings.json 文件,该文件用来配置当前项目的VS Code软件的一些特定配置,这个文件在实际项目中可以配置一些非常使用的功能,比如下面方式可以配置禁止搜索和禁止显示某些文件:

{// Configure glob patterns for excluding files and folders in fulltext searches and quick open. // Inherits all glob patterns from the `files.exclude` setting."search.exclude": {"**/node_modules": true,"**/bower_components": true,"**/*.code-search": true},// Configure [glob patterns](https://aka.ms/vscode-glob-patterns) for excluding files and folders. // For example, the File Explorer decides which files and folders to show or hide based on this setting. "files.exclude": {"**/.git": true,"**/.svn": true,"**/.hg": true,"**/.DS_Store": true,"**/Thumbs.db": true},
}

settings.json 文件可以配置的项目比较多,更多内容可以参考下面链接:
https://code.visualstudio.com/docs/reference/default-settings

总结

使用VS Code构建C/C++开发环境目前来说也是比较方便的,很多轻量的使用是完全可以满足的。

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

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

相关文章

一组可能的机器学习问题列表

线性回归与多项式拟合的关系最小二乘法在机器学习中的应用梯度下降是如何实现的贝叶斯分类器的应用场景高斯分布与判定在哪里用到模型的评估有哪些参数误差中的偏差和方差定义训练集分组的快捷方式如何度量模型性能查准率查全率的定义roc,aux的含义正则化是什么意思k均值用来解…

linux下io操作详细解析

在 Linux 系统下&#xff0c;IO&#xff08;输入/输出&#xff09;操作是程序与外部设备&#xff08;如文件、网络等&#xff09;交互的重要方式。Linux 提供了丰富的系统调用和库函数来支持各种 IO 操作。以下是对 Linux 下 IO 操作的详细解析&#xff0c;包括文件 IO、网络 I…

wsl2+ubuntu22.04安装blender教程(详细教程)

本章教程介绍,如何在Windows操作系统上通过wsl2+ubuntu安装blender并运行教程。Blender 是一款免费、开源的 ​​3D 创作套件​​,广泛应用于建模、动画、渲染、视频编辑、特效制作等领域。它由全球开发者社区共同维护,支持跨平台(Windows、macOS、Linux),功能强大且完全…

目标检测YOLO实战应用案例100讲- 基于卷积神经网络的小目标检测算法研究与应用

目录 知识储备 基于改进YOLOv5的小目标检测算法 一、环境配置(Python 3.8+) 二、核心代码实现 1. 改进模型定义(models/yolov5s_tiny.py ) 2. 小目标数据增强(datasets/tiny_aug.py ) 3. 训练脚本(train.py ) 三、关键改进点说明 四、实验配置建议 前言 传统…

智能DNS解析:解决高防IP地区访问异常的实战指南

摘要&#xff1a;针对高防IP在部分地区无法访问的问题&#xff0c;本文设计基于智能DNS的流量调度方案&#xff0c;提供GeoDNS配置与故障切换代码示例。 一、问题背景 运营商误拦截或线路波动可能导致高防IP在福建、江苏等地访问异常。传统切换方案成本高&#xff0c;智能DNS可…

根据 PID 找到对应的 Docker 容器

引言 在日常运维与调试过程中&#xff0c;我们常常需要查找某个进程所属的 Docker 容器。当系统出现问题或资源异常时&#xff0c;根据进程的 PID 找到其所属容器可以帮助我们迅速定位问题。本文将介绍如何利用 Linux 的 cgroup 机制&#xff0c;以及 Docker 提供的工具来完成…

NO.88十六届蓝桥杯备战|动态规划-多重背包|摆花(C++)

多重背包 多重背包问题有两种解法&#xff1a; 按照背包问题的常规分析⽅式&#xff0c;仿照完全背包&#xff0c;第三维枚举使⽤的个数&#xff1b;利⽤⼆进制可以表⽰⼀定范围内整数的性质&#xff0c;转化成01 背包问题。 ⼩建议&#xff1a;并不是所有的多重背包问题都能…

【远程工具】0 std::process::Command 介绍

std::process::Command 是 Rust 标准库中用于创建和配置子进程的主要类型。它允许你启动新的进程、设置其参数和环境变量、重定向输入/输出等。 基本用法 use std::process::Command;let output Command::new("echo").arg("Hello, world!").output().ex…

【图书管理系统】深入解析基于 MyBatis 数据持久化操作:全栈开发图书管理系统获取图书列表接口(后端:计算图书页数、查询当前页展示的书籍)

图书列表 实现服务器代码(计算图书总数量查询当前页需要展示的书籍) 后端响应时&#xff0c;需要响应给前端的数据 records&#xff1a;第 pageNum 页要展示的图书有哪些&#xff08;存储到List集合中&#xff09;total&#xff1a;计算一共有多少本书&#xff08;用于告诉前…

如何在idea中快速搭建一个Spring Boot项目?

文章目录 前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热启动&#xff08;热部署&#xff09;结语 前言 Spring Boot 凭借其便捷的开发特性&#xff0c;极大提升了开发效率&#xff0c;为 Java 开发工作带来诸多便利。许多大伙伴希望快速…

制作前的关键筹备:考试考核系统之核心要点

明确系统使用目的​ 制作考试考核系统前&#xff0c;企业需明确系统使用目的&#xff0c;这是开发基石&#xff0c;不同目的决定系统功能特性。用于员工培训考核时&#xff0c;系统要与培训内容结合&#xff0c;能生成相应考题&#xff0c;检验员工知识掌握程度&#xff0c;具备…

Springboot把外部jar包打包进最终的jar包,并实现上传服务器

1、创建lib目录&#xff0c;把jar包放进这个目录下&#xff0c;然后标记lib目录为“资源根路径”&#xff08;鼠标右键lib目录->将目录标记为->资源根路径。之后lib文件夹会有如下的图标变化&#xff09; 文件结构如下&#xff1a; 2、pom文件添加依赖 <dependency…

内容中台的核心架构是什么?

数据中枢与服务API架构 在内容中台的核心架构中&#xff0c;数据中枢作为基础层&#xff0c;通过统一的数据模型与标准化接口&#xff0c;实现多源内容的集中存储与治理。其核心能力体现在对结构化与非结构化数据的清洗、分类及跨系统同步&#xff0c;例如整合企业内部的CRM、…

Light RPC:一款轻量高效的Java RPC框架实践指南

Light RPC&#xff1a;一款轻量高效的Java RPC框架实践指南 一、框架简介二、快速入门1. 环境准备2. 服务端配置2.1 添加依赖2.2 YAML配置2.3 接口与实现 3. 客户端配置3.1 添加依赖3.2 YAML配置3.3 客户端调用 三、核心设计解析四、适用场景与优势对比五、总结 一、框架简介 …

Hologres实时数仓在B站游戏的建设与实践

一、背景 实时数据仓库是近年来数据技术领域内的一大发展潮流。构建一个能够实现高吞吐量写入与更新、端到端全链路实时处理以及低延迟、高并发的实时数据仓库&#xff0c;一直是众多企业面临的重大挑战。随着B站游戏业务的快速发展&#xff0c;对数据的实时应用需求也日益增加…

Android WiFi协议之P2P介绍与实践

Android WiFi P2P WiFi P2P (Peer-to-Peer) 是 Android 提供的一种允许设备之间直接通过 WiFi 进行通信的技术&#xff0c;无需接入传统的 WiFi 网络或互联网。这种技术也被称为 WiFi Direct。 一、WiFi P2P 基本概念 1. 核心组件 P2P 设备&#xff1a;支持 WiFi P2P 的 And…

浅谈在HTTP中GET与POST的区别

从 HTTP 报文来看&#xff1a; GET请求方式将请求信息放在 URL 后面&#xff0c;请求信息和 URL 之间以 &#xff1f;隔开&#xff0c;请求信息的格式为键值对&#xff0c;这种请求方式将请求信息直接暴露在 URL 中&#xff0c;安全性比较低。另外从报文结构上来看&#xff0c…

若依微服务集成Flowable仿钉钉工作流

项目简介 本项目工作流模块集成在若依项目单独一个模块&#xff0c;可实现单独运行部署&#xff0c; 前端采用微前端&#xff0c;嵌入在若依的前端项目中。因博主是后端开发&#xff0c;对前端不是太属性&#xff0c;没将工作流模块前端代码移到若依前端。下面贴上代码工程结构…

WPS JS宏编程教程(从基础到进阶)-- 第六部分:JS集合与映射在 WPS 的应用

目录 第6章 JS集合与映射在 WPS 的应用6-1 集合的创建(实例:唯一值提取)示例代码详细解析Excel 环境模拟说明6-2 集合的不重复特性应用(案例:提取唯一值记录)示例代码详细解析案例说明6-3 集合成员添加与删除示例代码代码解析直观示意(Excel 模拟表格)6-4 集合成员添加…

MySQL 约束(入门版)

目录 一、约束的基本概念 二、约束演示 三、外键约束 &#xff08;一&#xff09;介绍 &#xff08;二&#xff09;外键约束语法 &#xff08;三&#xff09;删除/更新行为 一、约束的基本概念 1、概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储…