当前位置: 首页 > article >正文

CMake在Windows环境下Visual Studio Code的使用

1,安装下载

地址:Visual Studio Code - Code Editing. Redefined

双击安装

选择安装路径

可勾选微软的AI工具

2,环境介绍

2.1 ,界面介绍

2.2中文包的安装

下载中文简体

汉化后的界面

2.3 配置C/C++环境

VSCode安装好之后,我们还是要知道,VSCode毕竟是一个高级的编辑器,只能用来写C/C++代码,不能直接编译代码。
所以,如果我们要能使用VSCode搭建C/C++的编译和调试环境,还必须有编译器使用。
为了方便,我们就使用MinGw-w64MinGw-w64移植到windows平台的一个gcc编译器,使用起来也是非常方便的。
下面我们就演示怎么下载和配置MinGw-w64

地址:https://sourceforge.net/projects/mingw-w64/

解压后我们会得到一个mingw文件夹

将其复制到你需要的位置

双击打开并进入bin文件夹内,这里有我们的gcc(C语言编译器)、g++(C++编译器),gdb调试器(可以使用断点调试)等

这里说gcc是C语言编辑器,g++是C++的编译器其实不太准确,因为gcc也可以编译C++,但是需要自己配置链接C++的库,g++默认链接了C++的库。

复制bin路径

!这样我们的准备环境就配置好了
我们可以使用一些命令来测试一下,按win+r输入cmd打开终端
以此输入

2.4  

安装vscode并安装一下必备的插件

vscode安装大家应该都会,如果通过浏览器下载vscode速度比较慢的话,可以复制下载链接放到迅雷里面去下载

安装必备插件
我们需要安装两个插件

  1. 安装C/C++插件:

3  配置

配置阶段我提供了两类配置方式,大家按需选择即可

第一类 使用vscode插件进行配置
这类配置方法一般来说不需要自己动手配置内容,只需要安装一下插件即可。

优点:使用简单,基本上拿来就可以使用,比较适合C/C++初学者(因为老师们貌似上来都是直接教C/C++语法,而不是C/C++编译器、C/C++标准、C/C++项目构成等一些C/C++基本内容)以及一些不需要复杂功能的同学。

缺点:可扩展性差(使用插件基本上是用插件配置好的命令去编译运行程序,如果你需要改或扩展一些配置的话,你得对一些命令很熟悉,当然这不是重点,重点是使用插件配置一般只能有一个有效的配置项,例如:如果你想从调试模式切换到编译模式,你得手动更改一下配置文件,而不是像大部分编辑器那样,选择一个配置去运行)

样例一:使用run code插件

因为插件配置实质上是用它提供的指令进行编译执行,因此无法直接使用断点调试功能,需要对配置进行一定的更改

这里以使用run code为例,在扩展里搜索code runner这个插件并安装

程序是在下面的输出栏中运行的,是无法输入内容的,所以我们还需要改一些内容,以便能够正常输入内容。

找到code runner扩展,点击扩展设置,找到Run In Terminal并勾上,这样就能够正常地输入内容了。

第二类 自定义配置

这类配置方法要自己手写配置内容,比较复杂,但可扩展性强
优点:可扩展性强
缺点:配置比较复杂、需要一定的知识储备

样例一:使用windows启动,让编译的文件放在同目录下的build文件夹中,并在黑窗(cmd)中运行
在配置之前,我们需要先创建一个.cpp文件,这里我创建了一个Test文件夹,并写了一个hello world。

请注意,一切的配置都要从一个cpp文件的编辑界面开始,否则vscode的提示可能会不太一样

样例一的配置方式因为本质上就是直接编译运行,因此无法使用断点调试功能

第一步:配置基本环境
按下ctrl + shift + p打开命令面板,输入C/C++,找到C/C++编辑配置(UI)打开

你可以在这个页面中选择编译器,更改C/C++标准,还可以更改IntelliSense 模式

PS:IntelliSense 模式和文本解析有关,如果你选择的IntelliSense模式和你的编译器不匹配,那么会报错,这就会引起例如写代码的时候没有提示、编辑器说代码正确、编译的时候却不正确等问题

这里可以选择你需要的C/C++标准

配置的内容会自动写入.vscode文件夹中的c_cpp_properties.json文件中。

这是我的c_cpp_properties.json文件内容

{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/**"],"defines": ["_DEBUG","UNICODE","_UNICODE"],"compilerPath": "F:/C++Development/mingw-w64/13.1.0/bin/g++.exe","cStandard": "c17","cppStandard": "gnu++17","intelliSenseMode": "windows-gcc-x64"}],"version": 4
}

第二步:配置task编译任务

按下ctrl + shift + p打开命令面板,输入task,找到 任务:配置任务 打开。

这里,介绍一下文件内需要注意的配置项

这是我的task.json中的配置内容

{"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C++: g++.exe 生成活动文件","command": "E:/Microsoft VS Code/mingw64/bin/g++.exe","args": ["-fdiagnostics-color=always",// 这个命令的作用是转化成GBK编码,可以防止终端中出现乱码// 乱码问题原因:终端编码和vscode编码不一致。// 国内大部分电脑终端编码默认是gbk,而vscode编码默认是utf-8,所以会出现问题乱码问题。// 加上这个命令后先转化为gbk编码后编译,就不会出现乱码了。// "-fexec-charset=GBK","-g","${file}", // 如果要多文件编译,改成 "${fileDirname}\\*.c*" 可以把c和cpp文件都作为cpp文件编译。"-o",// 这里加了一个build,让编译后的程序在同目录下的build文件夹中"${fileDirname}\\${fileBasenameNoExtension}.exe"],"options": {"cwd": "E:/Microsoft VS Code/mingw64/bin"},"problemMatcher": ["$gcc"],"group": "build","detail": "编译器: E:/Microsoft VS Code/mingw64/bin/g++.exe"}]
}

第三步:配置launch.json启动任务

因为现在的C/C++插件不支持通过命令面板创建任务,所以我们需要手动建一个launch.json文件

建完后打开,我们会发现右下角有一个添加配置

选择windows启动

{"configurations": [{"name": "(Windows) 启动","type": "cppvsdbg","request": "launch",// 这项是启动的程序位置,把tasks.json中的生成文件的路径复制粘贴过来就可以了"program": "${fileDirname}\\build\\${fileBasenameNoExtension}.exe","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],// 这项改为integratedTerminal,就和code runner一样是在vscode内置终端中运行了"console": "externalTerminal"// 这一项一开始没有,要自己写,代表启动前先执行的编译任务,把tasks.json中的label复制粘贴过来就可以了}]
}

样例二:使用gdb启动,让编译的文件放在同目录下的build文件夹中,并在vscode中运行(可以使用断点调试)


样例二使用了gdb调试器,所以能使用vscode的断点调试功能。

样例二与样例一稍作更改的地方是launch启动任务和task编译任务,因此就不配图演示了,只需要对照有注释的地方进行更改即可。

task编译任务

这是我的编译任务:

{"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C++: g++.exe 生成活动文件","command": "E:/Microsoft VS Code/mingw64/bin/g++.exe","args": ["-fdiagnostics-color=always",// 这个命令的作用是转化成GBK编码,可以防止终端中出现乱码// 乱码问题原因:终端编码和vscode编码不一致。// 国内大部分电脑终端编码默认是gbk,而vscode编码默认是utf-8,所以会出现问题乱码问题。// 加上这个命令后先转化为gbk编码后编译,就不会出现乱码了。"-fexec-charset=GBK","-g","${file}", // 如果要多文件编译,改成 "${fileDirname}\\*.c*" 可以把c和cpp文件都作为cpp文件编译。"-o",// 这里加了一个build,让编译后的程序在同目录下的build文件夹中"${fileDirname}\\build\\main.exe"],"options": {"cwd": "E:/Microsoft VS Code/mingw64/bin"},"problemMatcher": ["$gcc"],"group": "build","detail": "编译器: E:/Microsoft VS Code/mingw64/bin/g++.exe"}]
}

launch调试任务

注意:如果你不是copy这里给出的代码,而是自己像上文一样点击添加配置然后修改,请选择gdb启动而不是windows启动。

{"configurations": [{"name": "(gdb) 启动", // 调试任务的名称,改一个你想要的"type": "cppdbg","request": "launch","program": "${fileDirname}\\build\\main.exe",  // 入口程序的位置,和task任务生成的程序位置相同"args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "E:/Microsoft VS Code/mingw64/bin/gdb.exe", // gdb调试器的位置,和gcc、g++在一个目录下  "setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}],"preLaunchTask": "C++调试"  // 启动前调用编译任务}]
}

常见问题

Q:终端出现乱码怎么办?

A:在编译的时候加上"–exec-charset=GBK",具体可以看本教程的示例,两类配置方式中都有讲解

Q:在第二种配置方式中,选择task任务时,没有g++、gcc选项怎么办?

A:copy教程中的配置,然后对照图片说明进行更改。

相关文章:

CMake在Windows环境下Visual Studio Code的使用

1,安装下载 地址:Visual Studio Code - Code Editing. Redefined 双击安装 选择安装路径 可勾选微软的AI工具 2,环境介绍 2.1 ,界面介绍 2.2中文包的安装 下载中文简体 汉化后的界面 2.3 配置C/C环境 VSCode安装好之后&#xf…...

注意力机制在大语言模型中的原理与实现总结

注意力机制在大语言模型中的原理与实现总结 1. 章节介绍 在大语言模型的学习中,理解注意力机制至关重要。本章节旨在深入剖析注意力机制的原理及其在大语言模型中的应用,为构建和优化大语言模型提供理论与实践基础。通过回顾神经网络基础及传统架构的局…...

大学生机器人比赛实战(二)软件篇

大学生机器人比赛深度开发指南:核心技术详解与实战代码解析 作为参加过多次机器人竞赛的选手,我将详细剖析比赛中的核心技术实现,包括软件架构设计、实时系统应用、各大赛事代码特点以及性能优化技巧。本指南将帮助你从代码层面深入理解如何…...

AI大模型从0到1记录学习 day13

第 13 章 Python高级语法 13.1 浅拷贝与深拷贝  直接赋值:对象的引用(别名),不产生拷贝。  浅拷贝:拷贝父对象,不会拷贝对象的内部的子对象。拷贝后只有第一层是独立的。  深拷贝:完全拷贝…...

大模型学习三:DeepSeek R1蒸馏模型组ollama调用流程

一、说明 目前DeepSeek R1及其蒸馏模型均支持使用ollama进行调用,可以在模型主页查看调用情况 deepseek-r1https://ollama.com/library/deepseek-r1 显存需求 ,我们显存是16G,可以玩好几个 二、以14B模型演示 1、安装ollama curl -fsSL htt…...

RAGFlow部署与使用介绍-深度文档理解和检索增强生成

ragflow部署与使用教程-智能文档处理与知识管理的创新引擎 1. ragflow简介 ​ RAGFlow作为新一代智能文档处理平台,深度融合检索增强生成(RAG)技术与自动化工作流引擎,为企业级知识管理提供全栈解决方案。通过结合多模态解析、语…...

一文读懂 UML:基础概念与体系框架

UML 图是一种标准化的建模语言,在软件开发和系统设计等领域有着广泛的应用。以下是对 UML 图各类图的详细介绍: 1.用例图 定义:用例图是从用户角度描述系统功能的模型图,展现了系统的参与者与用例之间的关系。作用:帮…...

【AI赋能:58招聘数据的深度剖析之旅】

影刀出鞘,抓取数据 在当今数字化时代,数据分析已成为企业决策和发展的关键驱动力。而获取高质量的数据则是数据分析的首要任务。在这个信息爆炸的时代,网络上蕴含着海量的数据,其中招聘网站的数据对于人力资源分析、市场趋势研究…...

几何法证明卡特兰数_栈混洗

模型&#xff1a; 考虑从坐标原点 (0, 0) 到点 (n, n) 的路径&#xff0c;要求路径只能向右&#xff08;x 方向&#xff09;或向上&#xff08;y 方向&#xff09;移动&#xff0c;并且路径不能越过直线 y x&#xff08;即始终满足 y< x &#xff09;。这样的路径数量就是…...

Kafka的安装与使用(windows下python使用等)

一、下载 可以去官网下载&#xff1a;https://kafka.apache.org/downloads 版本可选择&#xff0c;建议下载比较新的&#xff0c;新版本里面自带zookeeper 二、安装 创建一个目录&#xff0c;此处是D:\kafka&#xff0c;将文件放进去解压 如果文件后缀是gz&#xff0c;解压…...

DataPermissionInterceptor源码解读

原文首发在我的博客&#xff1a;https://blog.liuzijian.com/post/mybatis-plus-source-data-permission-interceptor.html 目录 一、概述二、源码解读2.1 beforeQuery2.2 beforePrepare2.3 processSelect2.4 setWhere2.5 processUpdate2.6 processDelete2.7 getUpdateOrDelete…...

大模型中的参数规模与显卡匹配

在大模型训练和推理中&#xff0c;显卡&#xff08;GPU/TPU&#xff09;的选择与模型参数量紧密相关&#xff0c;需综合考虑显存、计算能力和成本。以下是不同规模模型与硬件的匹配关系及优化策略&#xff1a; 一、参数规模与显卡匹配参考表 模型参数量训练阶段推荐显卡推理阶…...

数据结构初阶: 顺序表的增删查改

顺序表 概念 顺序表是⽤⼀段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;⼀般情况下采⽤数组存储。如图1&#xff1a; 顺序表和数组有什么区别&#xff1f; 顺序表的底层是用数组实现的&#xff0c;是对数组的封装&#xff0c;实现了增删查改等接口。 分…...

Spring Boot项目中策略模式的应用与实现

前言 在Spring Boot项目中&#xff0c;策略模式是一种非常重要的设计模式&#xff0c;它能够让我们定义一系列算法&#xff0c;并使它们可以互相替换。 策略模式通过将算法封装到独立的类中&#xff0c;从而使得代码中的算法可以独立于使用它的客户端变化。 这对于某些需求频…...

【机器学习中的基本术语:特征、样本、训练集、测试集、监督/无监督学习】

机器学习基本术语详解 1. 特征&#xff08;Feature&#xff09; 定义&#xff1a;数据的属性或变量&#xff0c;用于描述样本的某个方面。作用&#xff1a;模型通过学习特征与目标之间的关系进行预测。示例&#xff1a; 预测房价时&#xff0c;特征可以是 面积、地段、房龄。…...

MySQL全链路指南

目录 前言 第一章 MySQL基础入门 1.1 MySQL简介与安装 1.2 数据库基本操作 1.3 表结构与数据类型 第二章 SQL语言深度解析 2.1 DDL&#xff08;数据定义语言&#xff09; 2.2 DML&#xff08;数据操作语言&#xff09; 2.3 DQL&#xff08;数据查询语言&#xff09; 2…...

System.arraycopy()

在 Java 编程中&#xff0c;数组是一种常用的数据结构&#xff0c;用于存储相同类型的元素集合。在处理数组时&#xff0c;经常需要进行数组复制操作&#xff0c;例如将一个数组的部分或全部元素复制到另一个数组中。System.arraycopy() 方法是 Java 提供的一个高效的数组复制工…...

详解AI采集框架Crawl4AI,打造智能网络爬虫

大家好&#xff0c;Crawl4AI作为开源Python库&#xff0c;专门用来简化网页爬取和数据提取的工作。它不仅功能强大、灵活&#xff0c;而且全异步的设计让处理速度更快&#xff0c;稳定性更好。无论是构建AI项目还是提升语言模型的性能&#xff0c;Crawl4AI都能帮您简化工作流程…...

【爬虫开发】爬虫开发从0到1全知识教程第14篇:scrapy爬虫框架,介绍【附代码文档】

本教程的知识点为&#xff1a;爬虫概要 爬虫基础 爬虫概述 知识点&#xff1a; 1. 爬虫的概念 requests模块 requests模块 知识点&#xff1a; 1. requests模块介绍 1.1 requests模块的作用&#xff1a; 数据提取概要 数据提取概述 知识点 1. 响应内容的分类 知识点&#xff1a…...

MySQL索引原理:从B+树手绘到EXPLAIN

最近在学后端&#xff0c;学到了这里做个记录 一、为什么索引像书的目录&#xff1f; 类比&#xff1a;500页的技术书籍 vs 10页的目录缺点&#xff1a;全表扫描就像逐页翻找内容优点&#xff1a;索引将查询速度从O(n)提升到O(log n) 二、B树手绘课堂 1. 结构解剖&#xff0…...

SQLark:一款国产免费数据库开发和管理工具

SQLark&#xff08;百灵连接&#xff09;是一款面向信创应用开发者的数据库开发和管理工具&#xff0c;用于快速查询、创建和管理不同类型的数据库系统&#xff0c;目前可以支持达梦数据库、Oracle 以及 MySQL。 对象管理 SQLark 支持丰富的数据库对象管理功能&#xff0c;包括…...

防爆对讲机VS非防爆对讲机,如何选择?

在通信设备的广阔市场中&#xff0c;对讲机以其高效、便捷的特点&#xff0c;成为众多行业不可或缺的沟通工具。而面对防爆对讲机与非防爆对讲机&#xff0c;许多用户常常陷入选择困境。究竟该如何抉择&#xff0c;且听我为您细细道来。 防爆对讲机&#xff0c;专为危险作业场…...

微信小程序开发:开发实践

微信小程序开发实践研究 摘要 随着移动互联网的迅猛发展&#xff0c;微信小程序作为一种轻量化、无需安装的应用形式&#xff0c;逐渐成为开发者和用户的首选。本文以“个人名片”小程序为例&#xff0c;详细阐述了微信小程序的开发流程&#xff0c;包括需求分析、项目规划、…...

操作 Office Excel 文档类库Excelize

Excelize 是 Go 语言编写的一个用来操作 Office Excel 文档类库&#xff0c;基于 ECMA-376 OOXML 技术标准。可以使用它来读取、写入 XLSX 文件&#xff0c;相比较其他的开源类库&#xff0c;Excelize 支持操作带有数据透视表、切片器、图表与图片的 Excel 并支持向 Excel 中插…...

青铜与信隼的史诗——TCP与UDP的千年博弈

点击下面图片带您领略全新的嵌入式学习路线 &#x1f525;爆款热榜 88万阅读 1.6万收藏 第一章 契约之匣与自由之羽 熔岩尚未冷却的铸造台上&#xff0c;初代信使长欧诺弥亚将液态秘银倒入双生模具。左侧模具刻着交握的青铜手掌&#xff0c;右侧则是展开的隼翼纹章。当星辰…...

「青牛科技」GC5849 12V三相无感正弦波电机驱动芯片

芯片描述&#xff1a; • 4 &#xff5e; 20V 工作电压&#xff0c; 30V 最大耐压 • 驱动峰值电流 2.0A &#xff0c;连续电流 800mA 以内 • 芯片内阻&#xff1a; 900mΩ &#xff08;上桥 下桥&#xff09; • eSOP-8 封装&#xff0c;底部 ePAD 散热&#xff0c;引…...

Java基础之反射的基本使用

简介 在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意属性和方法&#xff1b;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。反射让Java成为了一门动…...

大语言模型中的嵌入模型

本教程将拆解什么是嵌入模型、为什么它们在NLP中如此重要,并提供一个简单的Python实战示例。 分词器将原始文本转换为token和ID,而嵌入模型则将这些ID映射为密集向量表示。二者合力为LLMs的语义理解提供动力。图片来源:[https://tzamtzis.gr/2024/coding/tokenization-by-an…...

【从零实现Json-Rpc框架】- 项目实现 - 服务端主题实现及整体封装

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

位置编码(Positional Encoding, PE)的作用

在神经网络&#xff08;尤其是Transformer、RNN等序列模型&#xff09;中&#xff0c;位置编码&#xff08;Positional Encoding, PE&#xff09;的作用是为模型提供序列中元素的位置信息&#xff0c;以弥补模型本身对顺序感知的不足。 为什么Transformer需要位置编码&#xf…...