VS Code配置C++开发环境(MSVC)

发布时间 2023-10-08 21:28:36作者: iZhang

前置知识

这些内容如果感兴趣可以看一下,不看也不妨碍配置环境,因为我会一步步教你配置。(但我希望你还是看一下,毕竟我写了好久?)

C/C++编译器有哪些

注意我们说的是编译器,而不是集成开发环境(IDE,Integrated Development Environment)。我们平常用的Codeblocks,Visual Studio Code,Dev C++等软件都是开发环境,而不是编译器。

常用的C/C++编译器(更确切地说是编译器套件)有:GCCMinGWMSVC等。不同的编译器附有不同的库文件,如果某段代码只用了标准库,那么这段代码很可能用任意C/C++编译器都可以编译通过;而如果某段代码用了特定编译器独有的库文件,那这段代码很可能只能用特定编译器才能编译通过,甚至对该编译器的版本也有要求。

Windows系统的环境变量

什么是环境变量

​ 环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息(不好理解)。

​ 按照下面的方式查看Windows 10的环境变量

Snipaste_2023-10-08_16-06-31

​ 可以看到环境变量分为两部分:用户变量和系统变量

  • 用户变量:只对当前用户生效,优先级高于系统变量
  • 系统变量:对所有用户生效

​ 你也可以将环境变量理解为一个指针。我们在环境变量中定义一个名为“JAVA_HOME”的变量,它指向jdk的安装目录。在某段代码中你可能经常使用jdk作为参数,但如果jdk的安装目录变了,怎么办?你在程序中如果直接使用jdk的绝对路径,那你就从代码中找出来一个个地改吧;而如果你在程序中使用JAVA_HOME这个环境变量,当jdk的安装目录发生变化时,你只要改一下JAVA_HOME的内容即可,而你的代码无需任何修改,因为你的代码使用的是JAVA_HOME,而不是jdk的绝对路径。

环境变量有什么用

​ 想象这样一个场景:你编写了一个个性化的计算器软件,软件的路径为:D:\softwares\myself\calc.exe

​ 当你每次启动时,要么用文件管理器找到这个软件双击运行,要么通过命令行D:\softwares\myself\calc.exe执行。诚然,这两种方式耗费精力都差不多,因为calc.exe并没有位于很深层的目录下。那如果calc.exe位于第10层,甚至第100层目录呢,是不是每次打开这个软件很费劲?因为你要么需要打开100层文件夹,要么在命令行输入calc.exe的路径,都是很费劲的方法(当然你可以创建快捷方式,但我们先不考虑这种方法)。

​ 这时候,你就可以把calc.exe所在的目录添加到用户变量的Path变量下(你也可以添加到系统变量的Path下,这样就对所有用户生效了),这样每次执行calc.exe都不需要在命令行中输入那么一长串路径,而只需要输入calc.exe或者calc即可。

Path环境变量

Path是个很重要的环境变量,他里面存储的一般是一系列可执行文件的目录。

​ 下图所示是系统变量中的Path存储的内容,每一行代表一个目录,许多目录都是以“bin”(binary的缩写)结尾,代表该目录下存储了一些二进制的可执行文件。执行这些目录下的可执行文件不需要加一长串的路径,只需要在命令行输入可执行文件的名称即可。

Snipaste_2023-10-08_16-28-50

其他环境变量

​ 比如我们前面提到的“JAVA_HOME”环境变量,这其实就是一个普通的环境变量。你可以随便定义自己的环境变量,比如isjks:wwoqsi。你可以在命令行中执行echo %isjks%,会输出wwoqsi。当然这个并没有任何意义,我只是告诉你你可以随便定义自己的环境变量,无论这个变量有没有什么用。

​ 在上面一张图中,我们发现有些被百分号“%”包裹起来的东西,这些被包裹起来的,其实是已经定义的环境变量。比如SystemRoot的内容就是“C:\WINDOWS”。有些环境变量并没有在环境变量列表中被列出来,因此无法直接看到它的值。如果你对任何环境变量感兴趣,可以在命令行中执行echo %<ENV_VAR>%来查看它代表的内容。

安装Visual Studio Code

​ 这个没有难度,自己安装即可。vscode安装完成后会把自己加到环境变量,提示需要重启一下电脑。

安装VIsual Studio及相关附件

​ 在这里下载installer,选择社区版即可。

​ 接下来运行安装器,需要下载一些东西,之后如下图安装Community版

Snipaste_2023-10-08_18-33-00

​ 另外还需要勾选“使用C++的桌面开发“,这会安装Windows SDK和MSVC工具链。需要注意的是,如果你正在使用Windows10系统,在右侧”安装详细信息“里面取消勾选”Windows 11 SDK“,并且往下找到”Windows 10 SDK“并勾选。Win11 SDK能不能在Win10上面工作我没有研究。接下来点击安装即可,可能会花费10分钟左右的时间,具体看你的网络状况。

Snipaste_2023-10-08_18-52-51

​ 安装完成之后启动Visual Studio。

在Visual Studio中编写C++程序

​ 如下图所示,创建一个C++控制台应用。

Snipaste_2023-10-08_19-00-24

​ VS已经自动写了一个HelloWorld程序,按照它的提示运行这个程序,可以看到一个在命令行窗口输出了“HelloWorld”。至此可验证相关的工具都已经安装完成并正常工作。

程序是如何执行的

​ 为什么我们什么都没有配置,程序就跑起来了,而VS Code却不行?

​ 当然是Visual Studio已经给我们配置好了?而VS Code就需要我们手动配置了。

​ 右键点击解决方案,点击属性,会弹出一个属性页,如下图所示。

Snipaste_2023-10-08_19-09-12

​ 在这一页可以看到很多以$符开头的变量名称,像极了前面提到的环境变量。

​ 切换到“VC++目录”这个标签页,可以看到更多以$符开头的变量。

Snipaste_2023-10-08_19-12-21

​ 可以看到,这个标签页定义了一些外部文件目录和库目录,这些定义是必须的,正是因为VS Code并没有这些定义,所以它不能跑C++程序。

​ 点击“库目录”,在出现的下拉箭头中选择“浏览”,会出现一个窗口,在这个窗口中点击“宏”,就会出现以$开头的键值对,这就是Visual Studio预定义的一些内部变量(我也不知道称之为什么,暂且称为“内部变量”),是不是很像之前提到的环境变量?

Snipaste_2023-10-08_19-17-07

​ 好了,现在我们应该了解了,Visual Studio在创建C++项目时就帮我们配置好了比如库目录这些东西,VS Code之所以不能跑C++程序就是因为缺少这些配置。

设置环境变量

​ 下面就不多叙述了,总体来说就是把VS Code运行C++程序需要的依赖添加到环境变量中,接下来环境变量以K:V形式表达。另外还需要注意,如果你安装的是VS2022,那么安装目录为C:\Program Files\Microsoft Visual Studio\2022\Community;而如果是低于2022的版本,比如2019,它的安装目录为C:\Program Files (x86)\Microsoft Visual Studio\2019\Community。发现了吗?主要差别就是2022把安装目录挪到了Program Files里面,而不是Program Files (x86),所以接下来的配置需要根据你自己的情况做一些更改。

  1. 系统环境变量添加条目:VCTools: C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools
  2. 系统环境变量添加条目:WIN10KITS: C:\Program Files (x86)\Windows Kits\10
  3. 系统环境变量添加条目:MSVC_VERSION: 14.37.32822
  4. 系统环境变量添加条目:WIN_SDK_VERSION: 10.0.20348.0
  5. 系统环境变量添加条目:INCLUDE: %VCTools%\MSVC\%MSVC_VERSION%\include;%WIN10KITS%\Include\%WIN_SDK_VERSION%\ucrt;%WIN10KITS%\Include\%WIN_SDK_VERSION%\um;%WIN10KITS%\Include\%WIN_SDK_VERSION%\shared;
  6. 系统环境变量添加条目:LIB: %WIN10KITS%\Lib\%WIN_SDK_VERSION%\um\x64;%WIN10KITS%\Lib\%WIN_SDK_VERSION%\ucrt\x64;%VCTools%\MSVC\%MSVC_VERSION%\lib\x64;
  7. Path系统环境变量添加条目:%VCTools%\MSVC\%MSVC_VERSION%\bin\Hostx64\x64

第1、3、4条的内容需要根据你的实际情况修改。

把上面七条环境变量按顺序添加即可(后面3条是基于前面4条的,如果你看过前面的环境变量部分就会知道,后面三条可以直接复制?)

验证环境变量

打开命令行,按下图输入命令,应该和我的输出类似

Snipaste_2023-10-08_20-08-33

配置VS Code的环境

上面环境变量已经配置结束,接下来开始配置VS Code。

打开Windows命令行,依次执行一下命令:

  1. mkdir CppTest: 创建CppTest文件夹
  2. cd CppTest:进入CppTest文件夹
  3. type nul > hello.cpp: 创建hello.cpp空文件
  4. code .:使用VS Code打开当前目录

接下来VS Code打开并弹窗,选择信任文件夹,你就可以看到有一个hello.cpp空文件,在里面写一个HelloWorld。

忘记说了,你还要在VS Code的插件市场安装下图这个插件

Snipaste_2023-10-08_20-16-11

现在你的VS Code应该是这样的

Snipaste_2023-10-08_20-17-23

接下来跟我操作

  1. 在上方搜索框输入> Edit Configurations (UI),点击高亮的选项,之后会弹出新标签页,是一些配置选项,选择默认直接关掉标签页即可,之后会生成一个隐藏文件夹.vscode,里面有自动生成的c_cpp_properties.json文件

    Snipaste_2023-10-08_20-39-36

  2. 在上方搜索框输入> Default Build Task,点击高亮的选项,并选择C/C++ cl.exe 生成活动文件,之后会在.vscode文件夹自动生成tasks.json

    Snipaste_2023-10-08_20-39-46

  3. 之后点击菜单栏“运行 - 以非调试模式运行“,调试器选择”C/C++ (Windows)“,之后会在控制台打印”Hello World“

    Snipaste_2023-10-08_20-42-40

  4. all done!

一些疑问

为什么我们添加的环境变量的Key是LIBINCLUDE?有什么特殊规定吗?cl.exe是什么?

强烈建议阅读微软官方文档

我就不瞎解释了,因为我理解也不太够?

笔者才疏学浅,本文对许多技术细节的解释并不充分,甚至有误,因此如果你对本文有任何见解,欢迎指正???