vs code配置c++开发环境

目的

使用集成开发工具visual studio写c++程序的确方便,但是对于一般轻量的c++程序,特别是自己在跟着教程学习的过程中写的一些练习的例子,没必要每个工程都使用visual studio新建一个工程。

vs code作为一款轻量级的编辑器,配合一系列插件也可以开发c++程序。但是第一次配置vs code的c++开发环境,还是花了我不少功夫的,主要是网上的教程大多都是基于vs code + mingW编译器配置方案(我们安装了visual studio,又何必多此一举再去安装别的编译器?)。并且大多数都是翻译官网的文档,根本就配置不成功。

我们要开发c++程序,想必你的电脑已经安装了vs studio,既然我们安装了vs stdio,又何必多此一举再去安装mingW编译器呢?本文从0到1教你如何结合vs code和vs studio的cl编译器配置c++开发环境。

前提条件

  1. 安装vs code;
  2. 安装visual studio,版本随意;
  3. 安装c/c++插件;
    在这里插入图片描述
    前3步应该都没有难度,如果这里都搞不定的话,那你就在下面留言吧。

正文开始

假设我们暂时想使用vs code写一个简单的c++程序,按照如下流程:

  • 新建文件夹
    在任意位置新建一个文件夹,保存你的c++工程文件。比如我在桌面建立一个test文件夹,此时文件夹是空的,里面什么都没有。

  • 使用vs code打开文件夹
    在这里插入图片描述

  • 编写c/c++代码
    在这里插入图片描述
    点击这里,添加一个文件,比如我的是main.cpp文件,然后愉快地写一个简短的c++程序:
    在这里插入图片描述
    你这里可能就会有问题了,比如提示找不到头文件,不能智能提示,别急,慢慢往下看。

  • 配置c_cpp_properities.json文件-----指定编译器

到目前为止,我们已经写了一个cpp文件了,接下来就是各种配置,告诉vs code,使用什么调试器和编译器去编译、链接我们这个cpp文件。首先要配置的就是c_cpp_properities.json文件。

使用快捷键:ctrl+shift+p打开命令面板,输入c/c++(前提是你已经安装了c/c++插件),选中Edit Configurations(JSON),然后vs code自动打开生成 .vscode文件夹,并在里面生成c_cpp_properities.json文件,如下图所示:

另外一个Edit Configurations(UI)其实也是配置c_cpp_properities.json的,只是以window ui的形式配置,更方便,配置完后也会自动生成c_cpp_properities.json文件

  • 注意:

很多教程这里都是说的模棱两可的,都说如果没有 .vscode文件夹就自己手动建一个,没有各种json文件也是自己手动建。实际上是不需要的,vs code已经为我们定义好了各种json的模板,打开命令面板,搜索关键词就可以找到那些json文件模板,其也会自动为我们生成 .vscode文件夹,根本不需要我们手动建立。

在这里插入图片描述
在这里插入图片描述
其中,比较重要的是你的编译器路径,vs code一般会自动填充你的编译器路径。有时候可能vs code找到的cl编译器路径不正确,此时我们要手动填充正确的编译器路径,否则,vs code没办法编译你的cpp文件(vs code只是一款可以安装插件的编辑器,本质上与Windows自带的文本编辑器没什么不同,自身不能编译源码)。

如果你的电脑是x64位的,vs studio为了能编译32位的应用程序,一般会同时安装32位的编译器和64位的编译器,遗憾的是这两个编译器的名字都是cl.exe,我们无法从名字上区分。一般而言,32位的编译器就在vs的安装目录下的bin目录下,而64位的编译器安装在bin目录下的x64或者amd64文件夹下,一般我们选择64位的编译器。

其他的几个字段,比如includePath,顾名思义是指定你当前工程的包含目录,可使用绝对路径,也可使用默认的相对路径,如果你的代码十分简单,都可以删除这个字段(包含路径默认是当前文件夹,即使我们不显示指定包含路径,vs code也会在当前文件夹下搜索)。

  • 配置task----告诉vs code编译哪些文件

前面我们告诉了vs code使用cl.exe编译器进行源码编译,还要告诉vs code要编译哪些文件。tasks.json文件就是告诉vs code,我们要如何编译cpp文件,编译哪些cpp文件,编译输出是什么等等。

还是打开vs code的命令面板,输入task,选中Tasks:Configure Default Build Task,然后选择c/c++:cl.exe build active file,如下图所示:
在这里插入图片描述
在这里插入图片描述
选中task后,你的弹出来的选项可能与我这里的不同,没关系,随便选一个就好了,一般选择others,然后自动生成tasks.json文件,我们需要手动手动修改一些参数,如下图所示:
在这里插入图片描述

一般你的生成的tasks.json文件与我的可能不同,没关系,缺少的字段你按照我这里的给补上去,多余的你可以删掉。这里需要详细讲一下各个字段的含义,以及如何配置。

type:这里一般为shell,也许你的是echo,把它改为shell
label:没什么用,用默认的就好,这里不需要改。这个label就是待会你打开vs code的命令面板,输入label指定的名称就会定位到这个文件。
command:告诉vs code,我们使用cl.exe编译器,其路径在前面的c_cpp_properities.json定义的。
args:编译参数,前面三个参数一般不需要改,使用默认的就好,如果你不指定也可以,后面编译的时候会警告,具体参数的含义可以去visual studio里查看,都有的,比如Zi的含义如下图所示:
在这里插入图片描述
main.exe是我自己写的,表示此项目编译输出的可执行文件名称是main.exe,如果你要编译静态库,则应该写成xxx.lib

xxx.cpp:表示此项目编译的cpp文件,如果你的只有一个main.cpp,则此处只需要添加main.cpp文件即可,总之,根据实际需要,需要编译哪些cpp文件就增加哪些cpp文件即可。

其他字段:剩下的那些字段都是默认生成的,不需要管,如果你的没有,你也可以不增加这些字段,但是上面的那些字段必须要有的。

  • 配置launch----告诉vs code如何调用可执行文件

前面我们已经告诉vs code使用cl.exe编译器去编译指定的cpp文件,当编译成功时,编译器在当前文件夹下输出一个我们指定的可执行文件。其实到这里就已经完成了,不需要在配置其他的了。我们直接双击那个可执行文件就会得到程序输出的结果了。

但是我们想让vs code为我们提供一条龙服务,既然已经生成了exe文件,我们要如何使用tasks.json帮助我们生成的文件呢,而launch.json文件就是帮助我们做这个事情的。

还是一如既往地打开命令面板,搜索关键词:launch,选中launch.json,如下图所示。

在这里插入图片描述
这里比较简单,就是告诉vs code,我们要调用哪个exe可执行文件,在program字段处填充我们要调用的可执行文件即可。注意,这里的可执行文件应该是我们前面配置的tasks.json时指定的输出文件。

type:c++文件必须是cppvsdbg,一般这里默认就好;
request:我们是调用这个可执行文件,这里填launch(launch有调用程序的意思,我们一般安装完一个软件后,都会有launch xxx);
stopAtEntry:在入口点停止,一般程序的入口点就是main函数,如果这里填入true,则会在main函数那里停止,相当于打一个断点;
cwd:current working directory,当前工作路径,默认就好;
externalConsole:外部控制台,如果这里为true,则vs code会为我们调用cmd作为程序的输出打印设备,一般我们默认使用vs code的控制台就好;

在这里插入图片描述

  • 编译运行

所有配置都完成了,接下来就是编译运行了。
编译:快捷键:ctrl+shift+B,如果你的这个快捷键被win10的输入法的emoj快捷键无情占用,比如像我这样的:
在这里插入图片描述
那就从命令面板中启动调试吧,ctrl+shift+P,输入关键词task,找到Tasks:Run build task,如下图所示。
在这里插入图片描述
编译完后生成main.exe文件,如下图所示。
运行:ctrl+F5,调用main.exe可执行文件,在vs code的控制台输出,如下图所示。
在这里插入图片描述

错误处理

到目前为止,为了使用vs code为我们编译一个简单的c++程序,我们做了太多的工作。这也是大部分教程讲解vs code搭建c++编译环境所讲的内容,这里我把配置每个json文件的目的都告诉你了,相信你有一个大致的了解了。

接下来才是本文与其他的教程不一样的地方,大部分教程到这里就结束了,并且都是基于mingW编译器的配置,然后正常编译,执行,没任何问题。可是如果你真的按照前面的步骤一步步来,我相信你的程序是不能正常编译的。

cl.exe无法识别

第一个拦路虎就是编译都不通过,如图所示,提示无法识别cl.exe,出现这个问题是你没有把cl.exe的路径加到环境变量中。我们把cl.exe加到环境变量的path中就可以了,比如我的如下图所示。

这里cl编译器路径根据你实际的vs安装位置确定,还要注意是32位的还是64位的。如果你的电脑是64位的,则添加64位的编译器。
在这里插入图片描述
在这里插入图片描述
判断编译器是否添加到系统环境变量中的技巧
一般我们把cl编译器加到环境变量中后,打开cmd,输入cl,如果正常输出编译器的版本,则表明添加成功,如下图所示。
在这里插入图片描述

找不到头文件

我们在配置c_cpp_properities.json的时候并没有指定比如iostream等系统头文件,导致vs code识别不到iostream
在这里插入图片描述
解决这个问题很简单,要么在c_cpp_properities.jsonincludePath字段指定头文件,要么在系统环境变量中添加头文件搜索路径。在c_cpp_properities.json添加头文件路径,需要每个项目都要添加一遍,比较麻烦,我这里选择在系统的环境变量中添加头文件路径,一劳永逸。

如下图所示,在系统环境变量中新建一个INCLUDE变量(必须是大写),然后指定其路径,把c++的头文件路径包含进去。

添加头文件技巧

很多时候,我们自己也不清楚到底要添加哪些系统的头文件。我们打开visual studio,新建一个空项目,然后编译没问题,说明visual studio已经默认为我们添加了需要的头文件,我们只要把visual studio为我们添加的默认的头文件添加到INCLUDE指定的路径里就可以了。那么,vs为我们默认添加了哪些头文件呢,打开vs,依次找到VC++目录,找到包含目录,如下图所示:(我的是英文版,我不知道中文版的vs这里是怎么翻译的,将就看着吧,应该能看懂吧),把vs推断的头文件目录都添加到INCLUDE中即可;
在这里插入图片描述

在这里插入图片描述

找不到库文件

如下图所示,我们添加了头文件,编译不会提示找不到头文件的问题了,但是又提示找不到库。在系统环境变量中添加LIB(必须是大写),然后把系统的库文件包含进来即可,到底需要添加哪些库,还是看vs默认包含的库目录,如下图所示。
在这里插入图片描述

在这里插入图片描述

重启电脑,重启电脑,重启电脑!

我们把头文件,静态库以及编译器路径都添加到环境变量中了,也许vs code还是会提示找不到路径的问题,别着急,重启电脑即可。

使用cmd判断是否配置成功----这一步不是必须的

重启完电脑后,我们先不着急使用vs code编译,先使用cmd调用cl编译器编译看看有没有问题,看看我们的头文件,静态库目录是否都正确包含了。

如图所示,打开cmd,输入cl xxxx.cpp,其中,xxxx是你要编译的cpp文件的完整路径,如果正确输出out: xxx.exe,则表明没问题了,头文件和库目录都正确包含了。
在这里插入图片描述

编译的一些说明

  1. 仔细看看我的编译情况,有一个编译警告C4530,关于异常处理的警告,提示我们指定**/EHsc编译参数,还记得我们配置Tasks.json**文件的时候,args 指定了编译参数,我们在那里指定了 /EHsc,就是告诉编译器使用c++的异常。
  2. LNK2019错误。因为我的main.cpp文件中还引用的Test.cpp文件,而我只指定了编译main.cpp文件,没有指定编译Test.cpp,即我在编译main.cpp的时候还需要调用Test.cpp文件,而我没指定这个文件,编译器就不链接这个文件,导致我的main.cpp链接失败。再次回去看看我们前面配置的Tasks.json文件,编译参数args 包括了我需要链接的所有cpp文件,所以编译不会有问题。

开心的使用vs code开发c++吧

到目前为止,我们所有的配置都完成了。然后编译链接我们的程序即可。

编译:ctrl+shift+B
运行:ctrl+F5

实际上我们第一次编译生成exe可执行文件之后,ctrl+F5调用cmd执行没任何问题。但是如果我们因为某种原因修改了部分代码,然后重新编译生成exe文件,然后再次ctrl+F5就失效了,无法再次调用cmd执行可执行文件了。

我们一般可以选中要运行的可执行文件,右键选择在终端打开,然后在终端输入我们待运行的可执行文件即可。
在这里插入图片描述

工程结构

虽然说我们用vs code开发一些简短的c++程序,但是把所有的cpp,hpp文件都放在同级目录下,导致整个工程文件看起来很混乱,我一般喜欢按如下图所示管理我的工程文件,include中放头文件,src中放源文件,即头文件与源文件分离,如果还需要包括静态库文件,则新建一个lib文件夹,这样整个工程目录看起来就清爽多了。
在这里插入图片描述
复杂的目录结构并不会增加我们的配置,tasks.json,c_cpp_properties.json以及launch.json文件的配置不变,只是我们在写cpp文件包含头文件的时候,需要指定头文件的路径,比如:
在这里插入图片描述
这样,使用vs code管理并执行一个简短但又稍微复杂一点的工程文件就完成了。

调试输出中文乱码

由于我的系统是win10 中文版,系统默认的编码格式为GBK。但是vs code的源码默认编码格式为utf-8,如下图所示:
在这里插入图片描述
在这里插入图片描述
我们编译可执行文件时,vs code把字符串按照utf-8的格式存储,与我们的cmd默认编码格式不一样。我们可以临时cmd窗口的编码格式改为utf-8来解决编码不一致导致的乱码问题(实际上我们也可以通过Windows的字体设置选项来设置整个Windows系统的默认编码为utf-8,但这种方式会导致你原有的gbk编码的文件全部乱码,得不偿失)。

  • 查看cmd的编码格式: chcp,如下图所示,返回编码页936,这是gb2312格式

在这里插入图片描述

  • 输入chcp 65001,设置当前编码格式为utf-8
    在这里插入图片描述
  • 乱码解决
    在这里插入图片描述

结束

现在再看看当初的配置过程,仔细想想其实并不复杂。最大的难度在于我们不知道配置每个json文件的目的,还有可能对编译过程不了解,更谈不上设置编译参数了。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值