C++环境搭建及VScode配置

  相信很多人在初学 C++ 时被网上的文章与视频整得晕头转向,不同的文章质量,各种各样的版本,各种各样的IDE,有的会简单介绍一下每个的区别,有的则什么都不会说,而编译器的差异在一些地方也会有不同的结果,这对于新手就会更加不友好,因此本章我会做一个新手向的搭建攻略,帮助新手迈出编程的第一步。

一、minGW与MSVC的区别和选择

  首先对于编译器的选择上,网上有很多的版本,比如 minGW、MSVC、Clang等等,但他们的区别却很少有人来说,其中 clang 因为用的比较少所以在这里不做说明,我们主要来谈谈 $95\%$ 的文章会选用的编译器:GCC 与 MSVC。

GCC

  对于 GCC,因此我们就需要先知道GNU是什么。下面引用下比较专业的话:

GNU代表“GNU's Not Unix”的缩写,它是一个自由软件项目,旨在创建一个类似于Unix操作系统的开放源代码替代品。Richard Stallman于1983年发起了这个项目,他的目标是创建一个完全自由、开放、共享的操作系统,以便用户能够自由地运行、复制、分发、研究和修改它。

简单来讲 GNU 是一个自由软件项目,而其中有许多不同的工具和组件,而其中 GCC(GNU Compiler Collection,GNU编译器集合) 就是代表性的一个成果,在这里也特别说明一下,一般来讲 GCC和G++ 可以看为一个整体,虽然在编译 C 语言的代码时会用到 GCC,编译C++代码时会用到 G++,但实际上是GCC工具链的一部分。

  简单介绍完 GNU 和 GCC 后,我们来说一说 minGW,对于之前的那些组件主要是运行在Linux系统上的,而其对应在Windows上运行的则是 minGW(MAC系统也有对应的版本,这里不做赘述),其中也包括了 GCC 组件,使得其可以在 Windows 上编译,且由于用的是同一个组件,使得在不同的平台使用起来基本是相同的,出现不同的点更多只在操作系统的环境差异上,所以其跨平台的优势很大,并且有很丰富的社区资源和标准性,而且是开源的。但也有一些缺点,比如需要自己安装配置集成开发环境(IDE)、编译速度较慢等等。

MSVC

  MSVC的全称为Microsoft Visual C++,看名字我们就能知道这是由微软开发的C++编译器和开发工具套件,它一般是集成在 Microsoft Visual Studio 中,而且与IDE的适配非常好。与 GCC 不同的,MSVC主要针对平台是Windows系统,虽然牺牲了一些跨平台特性,但也因如此其对 Windows 上的优化很好,与 Windows API能更好的结合,且还自带了Windows SDK,这使得其在Windows开发上有了很大优势。但自身也存在一些缺陷,比如平台限制比较大,基本上是对标了Windows开发、闭源、兼容性问题(标准定义不同,会导致运行结果在一些场景下与GCC不同)、体积庞大的IDE(动不动20G+)。

将两款常用的编译器介绍完后,简单概括一下:GCC轻量且跨平台较好,适合学习探索;MSVC对Windows兼容性好,适合项目开发。因此在本文中,我们着重讲解在Windows平台下的 minGW 环境配置及第三方IDE安装。(其实Visual Studio更加无脑些,直接下载就可以)

二、minGW 下载及配置

下载部分

  因为 GNU 本身就是国外的项目,因此如果在官网下载 minGW 就会非常耗时,这里给各位放一个离线版的链接,搭配迅雷下载速度较好:MinGW。在点击链接后,按照下图的操作来完成下载与解压,其中在选择下载版本时,posix 和 win32、sjlj 和 seh都会有一些区别,大家可以自行了解这里不过多展开,我下载的则是 x86_64-posix-sjlj 版本。(为了防止误删建议把mingw64文件夹内的所有文件拷贝到一个单独的地方)

1

2

3

环境搭建

  在经过上述的操作后,C++搭建环境所需要的文件就准备完成了,下一步则是环境搭建。首先我们打开 mingw64 文件夹下的 bin 文件夹,复制资源管理器上面的路径地址(如图所示,每个人的可能都不一样但要确保是在bin目录下,且路径中最好不要有中文命名的文件夹),然后我们在桌面的此电脑处右击点击属性跳转到设置页面 ---> 在这里点击高级系统设置 ---> 点击环境变量 ---> 在上方 $Path$ 变量处双击 ---> 在新弹出的窗口点击新建 ---> 将刚刚复制的地址粘贴到文本栏中 ---> 点击确定(所有的窗口记得都点一下),下面将用图示来更详细演示一下。

这里说明下,我的电脑目前系统是win11,可能有的人版本与我不一样因此出现图片中的内容不同,但不管是什么版本文字都是不变的,在跳转到设置界面后找对应关键字即可,若有人桌面上没有此电脑图标,可以在开始菜单中点击设置 ---> 系统 ---> 系统信息来跳转到相同界面。

4

6

7

8

9

在进行上述的操作后,C++环境的搭建就已经完成了,现在我们需要来验证程序是否搭建好,首先我们按 win + R 键打开运行程序,然后输入 “cmd”,点回车会弹出一个黑色窗口(命令行),这时我们输入 g++ -v,如果输出了很多英文,说明环境搭建成功,如果显示 “'g++' 不是内部或外部命令,也不是可运行的程序或批处理文件。”则搭建失败,请检查上面哪个步骤出现了问题。

10

11

显示文件拓展名

  本身下一步中就可以直接写C++程序了,但是由于 Windows 的迷惑默认属性会把拓展名隐藏,所以要简单的说一下如何显示文件拓展名,这里以 win11系统为例,如果不在同一位置请找对应关键字。首先随便打开一个文件夹,点击上方的三点 ---> 属性 ---> 查看 ---> 向下滑 ---> 找到“隐藏已知文件类型的扩展名”并取消勾选 ---> 应用并确定。

12
13

第一个C++程序

  在完成上述配置后我们就可以编写第一个C++程序了,随便找一个地方右击新建 ---> 文本文档 ---> 打开文本文档,在文档中打出如下代码:

#include <iostream>
using namespace std;

int main()
{
    cout << "Hello World" << endl;
    return 0;
}

完成后保存文件并关闭,右击重命名文件名,这里我们用统一的 demo1.cpp 来命名,方便后续演示。最后我们在保存程序的文件夹内 按住 Shift 键然后右击,随后点击 “在此处打开 Powershell 窗口”这一选项,随后会弹出一个命令行窗口,此时在里面输入 g++ demo1.cpp -o demo1,若没有任何提示说明编译完成,如果报错请检查代码是否和文中一样。最后一步,输入 ./demo1,若屏幕中输出了 “Hello World” 语句,说明运行成功,也恭喜你完成了第一个C++程序。

14

15

16

17

18

简单说明编译指令

  对于程序中的代码而言今后学习中都会讲到,而对于编译命令这种本身很重要的技能却没有人教,所以在这里也简单给大家讲一下刚刚的编译指令 g++ demo1.cpp -o demo1 的用处:

g++:代表 C++ 编译用的程序,只要编译C++程序就一定需要这个命令,如果编译C语言则是 gcc;

demo1.cpp:对应我们刚刚写的程序的文件名;

-o demo1:这里要连起来看,-o 代表了将编译后的程序重命名,后面加的 demo1 则是重命名后的名字,默认情况下如果不重命名编译后的文件名则为 a.exe

所以总结下来,这个编译指令的含义就是:编译当前文件夹下的 demo1.cpp 文件,并将编译后的程序重命名为 demo1。细心的同学可以发现,编译后文件夹中多了一个 demo1.exe 的程序,这也就是编译后可以直接运行的程序,在最后一步我们执行的 ./demo1也就是为了执行这个程序,./在脚本中代表了运行的意思,后面紧接着的则为可执行程序。

三、VScode 安装及配置

  其实对于编程的工具来讲理论上是记事本都可以满足一切需要,但是随着代码量的逐渐增多、文件越来越多,记事本就不能满足更多的需求了,对于 IDE(集成开发环境)可以有不同的颜色风格帮助阅读代码、代码补全、更好的debug工具等等,是对于程序员来讲非常好的助手,当然对于前期学习来讲也不建议使用太高级的IDE,这样会过度依赖 debug 功能和自动检查的功能,不利于前期学习,这些大家自行选择即可。对于minGW编译器而言我在这里推荐两款代码编辑器:DEV-C++和VScode,前者在这里不会多说,因为整个安装的过程过于无脑且自带了编译环境(也就是你不按照前面部分去配置也没关系),但界面太老旧辣眼功能太少,因此我平常使用他的频率不高。而对于VScode而言,首先开源,并且有着很丰富的社区生态、插件,一个编辑器可同时进行很多语言的开发,并且软件很小很轻量,用起来比较方便,但缺点是他是不自带有编译器的,需要自己配置,并且配置过程中会有很多的坑,但如果配置完整后也是一个神器,所以最后的时间我将教大家如何从零配置VScode。

下载安装

  首先去搜索VScode并打开其官网,这里也贴出链接以防走错:VScode,点进来后大大的 Download就映入眼帘,直接点击下载即可,下载完成后打开,记得同意协议和勾选创建桌面快捷方式,并一路点下一步完成安装即可。

19

  安装完成后打开,我们会发现目前界面是英文的,所以我们要先安装汉化插件,点击软件左侧第五个按钮-插件,在搜索栏中搜索 Chinese 看到搜索出的简体中文插件后点击 install,安装完成后右下角会提示我们更改并重启,点击即可。

20

21

重启后我们要安装C++插件,重复刚才的步骤,只是将搜索的内容换成C++并安装即可,如下图所示:

22

至此我们需要安装的插件都已经安装完成,下一步则是配置运行环境。

运行环境配置

  我们创建一个文件夹,用于保存平常写的代码,需要格外注意一件事:文件夹的名字和文件夹所在的目录中不能出现任何中文名,这个判断的方法就是用前面提取地址的方法,如果里面有中文则需要换,没有则可以放心创建,一定要注意这件事,否则后面将会出现错误。

  接下来我们可以在VScode的欢迎页中找到打开文件夹这一选项(如果没有欢迎页就点文件-->打开文件夹),将其定位到刚刚创建的文件夹的内部,点选择文件夹。

23

打开后在文件夹中创建名为 “.vscode” 的文件夹,并在 .vscode 文件夹中创建 $4$ 个文件,分别是:c_cpp_properties.json、launch.json、settings.json、tasks.json,

24

现在,分别往四个文件中粘贴一下内容,其中第一个文件(c_cpp_properties.json)和第二个文件(tasks.json)需要根据自己的情况更改路径,且与之前不同的,路径之间的 \ 号需要换为 \\,需要更换的地方已经特别注明,记住,只改引号里的,引号外的别改,下面是已经配置好的,参考配置好的模板去选择:

c_cpp_properties.json:

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "cStandard": "c11",
            "cppStandard": "c++14",
            "intelliSenseMode": "windows-gcc-x64",
            "compilerPath": "E:\\mingw64\\bin\\g++.exe" //这里请更换成自己电脑上所存的 mingw 下的 g++.exe路径,并将路径中的 \ 换为 \\
        }
    ],
    "version": 4
}

launch.json:

// https://code.visualstudio.com/docs/cpp/launch-json-reference
{
    "version": "0.2.0",
    "configurations": [{
        "name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
        "type": "cppdbg", // 配置类型,对于C/C++可认为此处只能是cppdbg,由cpptools提供;不同编程语言不同
        "request": "launch", // 可以为launch(启动)或attach(附加)
        "program": "${fileDirname}/a.exe", // 将要进行调试的程序的路径
        "args": [], // 程序调试时传递给程序的命令行参数,一般设为空
        "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,相当于在main上打断点
        "cwd": "${workspaceFolder}", // 调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录
        "environment": [], // 环境变量
        "externalConsole": true, // 使用单独的cmd窗口,与其它IDE一致;为false时使用内置终端
        "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?
        "MIMode": "gdb", // 指定连接的调试器,可以为gdb或lldb。但我没试过lldb
        "miDebuggerPath": "gdb.exe", // 调试器路径,Windows下后缀不能省略,Linux下则不要
        "setupCommands": [
            { // 模板自带,好像可以更好地显示STL容器的内容,具体作用自行Google
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": false
            }
        ],
        "preLaunchTask": "C/C++: g++.exe 生成活动文件" // 调试前执行的任务,一般为编译程序。与tasks.json的label相对应
    }]
}

settings.json:

{
    "files.associations": {
        "ostream": "cpp",
        "chrono": "cpp",
        "random": "cpp",
        "limits": "cpp",
        "valarray": "cpp",
        "iostream": "cpp",
        "string": "cpp",
        "thread": "cpp",
        "*.tcc": "cpp",
        "bitset": "cpp",
        "codecvt": "cpp",
        "string_view": "cpp",
        "algorithm": "cpp",
        "istream": "cpp",
        "cmath": "cpp",
        "stdexcept": "cpp",
        "forward_list": "cpp",
        "list": "cpp",
        "unordered_map": "cpp",
        "unordered_set": "cpp",
        "vector": "cpp",
        "sstream": "cpp",
        "regex": "cpp",
        "array": "cpp",
        "complex": "cpp",
        "scoped_allocator": "cpp",
        "system_error": "cpp",
        "tuple": "cpp",
        "iosfwd": "cpp",
        "deque": "cpp",
        "atomic": "cpp",
        "cctype": "cpp",
        "cfenv": "cpp",
        "charconv": "cpp",
        "cinttypes": "cpp",
        "clocale": "cpp",
        "condition_variable": "cpp",
        "csetjmp": "cpp",
        "csignal": "cpp",
        "cstdarg": "cpp",
        "cstddef": "cpp",
        "cstdint": "cpp",
        "cstdio": "cpp",
        "cstdlib": "cpp",
        "cstring": "cpp",
        "ctime": "cpp",
        "cuchar": "cpp",
        "cwchar": "cpp",
        "cwctype": "cpp",
        "exception": "cpp",
        "functional": "cpp",
        "iterator": "cpp",
        "map": "cpp",
        "memory": "cpp",
        "memory_resource": "cpp",
        "numeric": "cpp",
        "optional": "cpp",
        "ratio": "cpp",
        "set": "cpp",
        "type_traits": "cpp",
        "utility": "cpp",
        "fstream": "cpp",
        "future": "cpp",
        "initializer_list": "cpp",
        "iomanip": "cpp",
        "mutex": "cpp",
        "new": "cpp",
        "shared_mutex": "cpp",
        "streambuf": "cpp",
        "typeindex": "cpp",
        "typeinfo": "cpp",
        "stdio.h": "c"
    }
}

tasks.json:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 生成活动文件",
            "command": "E:\\mingw64\\bin\\g++.exe",//这里同上面文件,请换成自己存储的g++所在路径    
            "args": [
                "-std=c++11",
                "-O0",
                "-Wl,--stack=268435456",
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\a.exe",
                "-g",
                "-fexec-charset=GBK"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

实验程序

  完成上述操作后,我们创建一个C++文件,记住创建程序应该在 .vscode 文件夹之外,注意不要创建错位置,然后继续写上我们最初运行的代码,Ctrl + S 保存后点击上面的运行 ---> 以非调试模式运行,然后·····会发现一个黑框闪了一下就消失了。

25

这是因为VScode会单独调起一个终端来运行程序,程序执行完后终端就会自动关闭,因此我们需要加一行代码:system("pause");来维持窗口的出现,直到按回车键程序才会结束,这样就可以完美运行我们刚刚的程序啦!

26

断点调试

  VScode不仅拥有更好的代码补全与颜色上的区分,还有着强大的断点调试工具,但因为篇幅原因这里就不去说断点的原理,而是教大家怎么开启断点调试。在程序的左侧有程序对应的行号,将当鼠标悬浮在行号上时左侧将出现一个红点,单击红点则加入了断点调试,再次点击则取消了断点调试,再加完断点以后如果想让断点生效,需要在运行中选择启动调试,这样断点就会生效,程序会弹出调试界面,而调试的操作,就等各位以后自己去探索啦!

27

可能出现的问题

1.若在加入 json 文件后无法正常运行程序,去检查路径中是否存在中文路径、其中的两个中文文件路径修改是否正确;

2.程序本身的命名是允许采用中文的,但是若采用断点调试,则程序必须不出现中文字符,否则断点会无法生效,这是gdb的特性;

3.对于json文件的内部,本身不需要要求掌握,等阅历慢慢的提高了,自然也就明白了每个参数的意思。

四、总结

  这篇文章为新手保姆级的环境搭建系列,期间其实在截图上消耗了不少经历,希望这篇文章可以帮助更多人走出搭建环境的雷区,顺利踏入编程的世界,也希望可以多多支持。

  最后,祝各位在编程的学习中一路顺风!

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
隐藏
变装