前言

VSCode是一款轻量级的代码编辑软件,拥有良好的代码编辑界面和许多好用的插件拓展,但它不是一款IDE(集成开发环境),因此不能直接编译运行C/C++文件,所以我们需要学会如何配置编译运行环境。

笔者之前用的IDE是Visual Studio 2019,但存在打开速度慢的缺点,以至于有人吐槽说“等你打开好vs我代码都写完了”;而且当你要写一小段cpp代码来验证某个知识点的时候也需要新创建一个项目,这就显得十分麻烦;再者,笔者发现VS的项目还特别占用空间,一个课程下来所有代码占用的空间竟达到3G之多,而且一个文件夹明明显示大小只有不到20M,实际上却占用了400多M的空间,这让笔者感到很疑惑。后来笔者了解到,占用内存的幕后主使是VS自身产生的缓存,而且它们还是以隐藏文件的形式潜藏在文件夹内,无形中占用掉大量的磁盘空间。

   

隐藏起来的缓存文件

因此,笔者决定学习如何在VSCode上配置C环境。在这个过程中笔者查阅了很多互联网上的教程,也遇到了很多意想不到的错误,尤其是笔者尝试多文件编译的时候。故笔者在此给出我自己的一套配置方法,算是对各种教程的一个小总结。在此要感谢那些细心的、无私的提供教程的人!

安装VSCode和MinGW-w64编译器

MinGW 的全称是:Minimalist GNU on Windows 。它实际上是将经典的开源 C语言 编译器 GCC 移植到了 Windows 平台下,并且包含了 Win32API ,因此可以将源代码编译为可在 Windows 中运行的可执行程序。简言之,MinGW 就是 GCC 的 Windows 版本 。

VSCode的安装在网上已经有很丰富的教程,而且不是配置的重点,故略去,MinGW的安装可以直接搜索或到如下网址下载:

MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net

下载图中版本即可。

添加环境变量以及在VSCode上安装C/C++插件

将下载好后的MinGW文件夹解压到任意一个目录下,点开文件夹里面的bin文件夹,然后复制它的相对路径:

之后 此电脑-右键-属性 在右边找到“高级系统设置”,点击进入后点击“环境变量”,在下方的“系统变量”中找到Path变量,点击“编辑”:

然后点击“新建”,把刚刚的bin目录粘贴进去,之后点击确定,如图所示,之后一路点击确定退出。这时我们打开cmd,键入gcc并按回车或者键入g++并按回车,出现如下图所示的结果表明已经配置好了MinGW:

 

OK,这时我们可以打开VSCode,找到左边栏的“拓展选项”,搜索C/C++然后安装插件即可(第一次打开VSCode界面显示的是英文,我们可以搜索“Chinese”安装简体中文插件即可):

 

现在,你可以尽情地在VSCode中敲代码了!笔者建议创建一个特定的文件夹,然后用VSCode的“打开文件夹”打开,然后就可以在左侧的“资源管理器”中新建代码文件了,记得写正确拓展名哦!之后编写的C/C++代码都存放在这个文件夹中,至于为什么要这么做,笔者会在下面提到。

 编译/调试单个c/cpp文件

在VSCode中写完了代码之后,我们就要编译运行了。首先点击左侧的“小虫子”,看到“运行和调试后”点击“创建launch.json文件”,在正上方的弹框中选择第一个,继续选择第一个(g++),之后就会自动创建出一个json文件了。我们需要配置的就是launch.json和tasks.json两个文件。

之后回到cpp文件中,点击F5(Fn+F5)就可以编译运行了,输出会在下方的“终端区”显示,如果想要弹出一个“黑框框”的话,就需要回到launch.json文件中,找到"externalConsole"(外部控制台),把后面的参数改成“true”即可。很神奇的是,不加限制的话VSCode的“黑框框”总是会一闪而过,因此一般会在代码最后加上一句“system("pause")”来让它保留在屏幕上。

我们可以发现此时文件夹下自动多出了一个“.vscode”文件夹,在那里可以看到两个json文件。在此可以回答为什么上面提到要把代码都放在同一个文件夹下了:VSCode只是一款编辑器,并不具备调试功能,两个json文件的作用就是告诉VSCode应该如何编译我们的代码以及去哪里找到相应的头文件等。没有了“.vscode”文件夹,VSCode就不可以完成编译文件的操作了。在同一个文件夹下的全部代码都可以共用同一个“.vscode”文件夹,就会方便许多。

到目前为止,VSCode已经可以为你编译单个的c/cpp文件了!

你可以在VSCode界面下键入Ctrl+Shift+p,在弹出的输入栏内输入C/C++,找到编辑配置,打开:

之后可以看到“.vscode”文件夹下多出了一个json文件,它的作用主要是配置inlcude的目录,当你只用到系统自带的标准库时,可以无需理会这个文件,但当你需要自己创建.h头文件和include他人的头文件时,就需要进行配置(右边的“包含路径”,笔者忘记是什么时候要用到了,反正等报错了再算吧,暂时不管也行):

创建项目并调试

在编程的路上,我们肯定不会止步于单个文件的编写,很多时候我们需要创建一个项目啦,include很多的头文件啦,这时候你会发现VSCode会给你的c/cpp文件报错了,无法正常编译:

"No such file or directory"???明明代码都没有错呀,怎么点一百次调试还是错呢?不用再抓头了,这是因为VSCode不知道上哪去找你的头文件。

我们打开c_cpp_properties.json,找到"includePath"这个变量,可以看到它的参数只有"${workspaceFolder}/**",它的意思是当前的文件夹,在上图中我们的头文件是放在了head子文件夹下的,难怪编译器找不到它啦!

笔者推荐一种项目管理方式,就是在项目文件夹下创建子文件夹并命名为"include",用于存放头文件;创建子文件夹并命名为"lib",用来存放实现头文件中的函数的cpp文件;创建子文件夹并命名为"src",用于存放源文件,之后配置c_cpp_properties.json,在"includePath"中添加(注意多个值的时候最后一个值前要加逗号哦):

"${workspaceFolder}/include"

接下来打开tasks.json文件,在"args"变量中添加:

"-I","${workspaceFolder}/include", //"-I"指定链接库

"${workspaceFolder}/lib/xxx.cpp", //有一个cpp文件就加上一个cpp文件,下图添加了四个

在编译之前,要确保launch.json中的"program"参数后面的值就是你要编译的那个cpp文件哦!比如说我的demo.cpp文件放在了src文件夹中,那么我就要把原始的值改为图中所示:

完成这些配置后,如无意外就可以编译自带头文件的代码啦!(示例如图)

学会用CMake

上述方法存在一个麻烦的地方,就是总要手动添加很多东西,笔者看到很多人都在极力推荐用CMake管理项目,通过CMakeList来一键配置,似乎很方便,于是笔者又去了解了一番,并找到了一个介绍得很详细的视频,故在此不作详细介绍:

手把手教会VSCode的C++环境搭建,多文件编译,Cmake,json调试配置( Windows篇)_哔哩哔哩_bilibili

个人总结就是:

1.安装好CMake,添加环境变量

2.在目标文件夹下可以把所有头文件和cpp文件都放在一起,之后创建CMakeLists.txt,通过project()和add_executable()命令配置好

3.按下Ctri+Shift+p输入CMake找到Cmake配置,配置好后会自动生成一个build文件夹

4.之后修改launch.json和tasks.json

launch.json如下:

{// 使用 IntelliSense 了解相关属性。// 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "C/C++: g++.exe Build and debug active file","type": "cppdbg","request": "launch","program": "${workspaceFolder}/build/hello.exe", //要和你生成的那个可执行文件匹配"args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": true,"MIMode": "gdb","miDebuggerPath": "D:\\MinGW\\mingw64\\bin\\gdb.exe","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}],"preLaunchTask": "Build" //记得改成这样}]}

tasks.json如下:

{   "version": "2.0.0","options": {"cwd": "${workspaceFolder}/build" //cd到build文件夹下},"tasks": [{"type": "shell","label": "cmake","command": "cmake","args": [".."]},{"label": "make","group": {"kind": "build","isDefault": true},"command": "mingw32-make.exe","args": []},{"label": "Build", //总的要执行的label,包含以上两个label"dependsOn":["cmake","make"]}],
}

好的,之后编译运行即可,芜湖起飞!

写在最后

配置C/C++环境的整个过程是很麻烦的,对于像我这样的小白来说更是困难重重,那为什么不直接用那些简便的IDE呢?我认为在这个过程中可以体会到那些IDE工作的过程,对C/C++文件的编译有更深刻的了解,可以为将来在Linux系统中配置环境打下基础。同时,在学习的过程中我们遇到了各种各样的json文件,它的语法非常有趣,像是一个个的键值对,那么json是什么?里面每一条代码的作用是什么?这些问题都勾起我的好奇心,想要一探究竟。在网上有很多人已经给出详细的注释,在此笔者不敢班门弄斧,故留给各位读者尽情探索。

什么?还是报错?我的评价是:重启VSCode!

VSCode配置C/C++(单文件+项目)自救指南相关推荐

  1. VScode 本地或远程单文件和多文件调试精简配置

    在一个.cc文件的情况下,不需要手动配置json文件,vscode可以自动生成! 有其他.h或者.cc文件的情况下,需要改一些配置 仅需一个C++插件 ms-vscode.cpptools 即可完成远 ...

  2. Vue单文件项目自定义组件入门

    1.安装vue-cli工具,全局安装vue-cli npm install -g @vue/cli 或者 yarn global add @vue/cli 2.创建一个项目 //创建一个名字为rume ...

  3. SpringMVC 单文件上传与多文件上传

    一.简述 一个javaWeb项目中,文件上传功能几乎是必不可少的,本人在项目开发中也时常会遇到,以前也没怎么去理它,今天有空学习了一下这方面的知识,于是便将本人学到的SpringMVC中单文件与多文件 ...

  4. 实现文件上传,从配置到上传文件到获取文件

    目录 前言 功能介绍 实现 依赖 配置 Controller 效果-单文件 效果-多文件 前言 上传文件功能是每个项目必备的功能,通过多个项目不断升级而来,在实现相同效果的情况下,代码越来越简化. 代 ...

  5. 一篇文章带你搞定 SpringBoot 上传文件(单文件/多文件/Ajax上传)

    文章目录 一.前期配置 二.单文件上传 三.多文件上传 四.Ajax 实现文件上传 五.属性配置 一.前期配置 同样不需要额外配置添加一个 web 功能模块即可 二.单文件上传 上传页面 index. ...

  6. VSCode环境下配置ESLint 对Vue单文件的检测

    本文介绍了在VSCode环境下如何配置eslint进行代码检查,并介绍了如何对.vue单文件进行支持. ESLint 安装 1.在工程根目录下,安装eslint及初始化 $ npm install e ...

  7. Vue 单文件组件||Vue 单文件组件的基本用法||webpack 中配置 vue 组件的加载器|| 在 webpack 项目中使用 vue

    Vue 单文件组件 传统组件的问题和解决方案 1. 问题 1. 全局定义的组件必须保证组件的名称不重复 2. 字符串模板缺乏语法高亮,在 HTML 有多行的时候,需要用到丑陋的 \ 3. 不支持 CS ...

  8. Vue第七章:项目环境配置及单文件组件 vue脚手

    第七章:项目环境配置及单文件组件 vue脚手架 回顾: 组件之间的通信 父传子:正向传递 vue允许 自动触发 ​ props ​ 1.先在子组件中定义期待的属性名和类型 ​ 2.在父组件中调用子组件 ...

  9. ubuntu下vscode配置C++项目编译调试(json文件),以高翔octomap教程为例,顺便解决vscode无法设置断点问题.

    首先展示一下文件路径结构: 其中C++文件在src目录中,.vscode以及CMakeLists.txt在上层目录. 1.编译设置 该项目的编译是在build.sh文件中,内容就是 cd build ...

最新文章

  1. 网络广告投放四大技巧有哪些?怎么样投放效果最好?
  2. 【55】让自己熟悉Boost
  3. 使用精确的Java方法参数
  4. HTML+CSS+JS面试题(附带答案)
  5. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its 错误解决办法
  6. 飞鸽传书绿色版 为什么比较多人用?
  7. 基于CSS3实现垂直轮播效果
  8. 使用VisualStudio或VisualStudio Code作为代码比较工具
  9. mysql-mysqldump命令导出多个数据库结构(实战)
  10. [已解决]罗技鼠标驱动打不开问题
  11. Android 关于内存泄漏的一些总结
  12. vue3 ts 手动封装message消息组件
  13. 明华澳汉 sle_4442 卡 读写
  14. win10共享打印机搜索不到计算机,w10共享打印机搜索不到如何处理
  15. 企业级业务架构如何设计?
  16. Codeforces Round #521 (Div. 3) E. Thematic Contests
  17. python循环语句打印输出1-10_python_不用循环打印1-1000
  18. c语言数据文件是,C语言数据文件操作.ppt
  19. sql中的模糊查询及字段前加N的作用
  20. iScroll.js快速使用

热门文章

  1. docker、kubernetes安装部署fastdfs文件集群系统
  2. csdn写博客时图片插入方法
  3. 【论文翻译】Conv-MPN
  4. 有个厉害的程序员女朋友是什么体验?
  5. ImageNet的top-1终于上了90%,然而谷歌却遭众网友吐槽
  6. 北京大兴国际机北京大兴国际机场,炫酷之处,一图了解!
  7. CorelDRAW VBA - 遍历文档、页面、图层和形状对象
  8. JTAG, TTL, CFE
  9. Mysql数据库--自学笔记--2
  10. java时间格式转换pm,将字符串转换为日期和时间为am / pm格式