VScode-配置C/C++环境

VScode-配置C/C++环境

8NF6Et.png

准备工作

下载并安装相应软件

C/C++
  • 下载 VScode 最新版,第一次使用 VS Code 时你应该知道的一切配置,按照这篇文章安装相应插件
  • 下载并安装 MingW-64,验证是否安装好 MingW,验证方式:
    命令行 cmd,输入g++ -v,``gcc -v,gdb -v若输出一大段信息,则说明安装成功(此处不详述,自行百度)

添加 MingW 环境变量

  • 环境变量
  1. windows 环境下,右键点击此电脑 -> 属性 -> 高级系统设置 -> 高级 -> 环境变量打开如下图所示窗口
  2. 点击新建添加一个环境变量,点击编辑修改一个环境变量,变量名和变量值设置时,不要含有空格,也不要使用中文,多个路径之间使用; 分隔。通常情况下用户变量一经修改后会立即生效,而系统变量需要重启电脑后才能生效,对于正在运行的程序需要关闭后再重新运行,新设置才能生效
  • 添加 MingW 环境变量

Mingw所在的bin文件夹添加到环境变量的path中去,比如我将 Mingw 下载到了 E 盘,添加环境变量示例如下:

添加环境变量

工作空间设置,只针对当前项目有效。比如说我们可以在这里面要求当前项目的代码统一使用制表符,而不需要要求每一个团队成员去修改各自的配置文件。

  • 验证

MinGW 安装并导入文件后,其中包含了 C 与 C++这两个编译环境,操作:win + R ,输入cmd进入命令行模式,输入gcc --hg++ --h,(h 前面有两个 - )具体操作如下:如未出现,可以尝试重启电脑;

验证

vscode 全局变量

  • {workspaceRoot} VS Code 当前打开的文件夹
    • ${file} 当前打开的文件
    • ${relativeFile} 相对于 workspaceRoot 的相对路径
    • ${fileBasename} 当前打开文件的文件名
    • ${fileDirname} 所在的文件夹,是绝对路径
    • ${fileExtname} 当前打开文件的拓展名,如.json
    • ${cwd} the task runner's current working directory on startup

.vscode文件夹的作用

在项目的根目录下新建一个vscode文件夹,说明这个文件夹代表的是当前项目的配置

工作空间设置,只针对当前项目有效。比如说我们可以在这里面要求当前项目的代码统一使用制表符,而不需要要求每一个团队成员去修改各自的配置文件。

lunch.json

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
      "type": "cppdbg", // 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg
      "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
      "program": "${fileDirname}/${fileBasenameNoExtension}.o", // 将要进行调试的程序的路径
      "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
      "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,相当于在main上打断点
      "cwd": "${workspaceFolder}", // 调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录
      "environment": [], // 环境变量
      "externalConsole": false, // 为true时使用单独的cmd窗口,与其它IDE一致;18年10月后设为false可调用VSC内置终端
      "MIMode": "gdb", // 指定连接的调试器,可以为gdb或lldb。
      "setupCommands": [
        // 模板自带,好像可以更好地显示STL容器的内容,具体作用自行Google
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ],
      "preLaunchTask": "build",
      "windows": {
        "program": "${fileDirname}/${fileBasenameNoExtension}.exe",
        "miDebuggerPath": "E:\\mingw-w64\\mingw64\\bin\\gdb.exe" // 调试器路径,Windows下后缀不能省略,Linux下则不要
      },
      "osx": {
        "externalConsole": true
      }
    }
  ]
}

tasks.json

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build",
      "type": "process",
      "command": "g++",
      "args": [
        "-g",
        "-Wall",
        "-std=c++14",
        "-lm",
        "${file}",
        "-o",
        "${fileDirname}/${fileBasenameNoExtension}.o"
      ],
      "presentation": {
        "echo": false,
        "reveal": "silent",
        "showReuseMessage": false
      },
      "problemMatcher": "$gcc",
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "windows": {
        "args": [
          "-g",
          "-Wall",
          "-std=c++14",
          "-lm",
          "${file}",
          "-o",
          "${fileDirname}/${fileBasenameNoExtension}.exe"
        ]
      }
    },
    {
      "label": "run",
      "type": "shell",
      "dependsOn": "build",
      "command": "${fileDirname}/${fileBasenameNoExtension}.o",
      "presentation": {
        "focus": true
      },
      "group": {
        "kind": "test",
        "isDefault": true
      },
      "windows": {
        "command": "${fileDirname}/${fileBasenameNoExtension}.exe"
      }
    }
  ]
}

settings.json

{
    "files.exclude": {
        "**/*.o": true,
        "**/*.exe": true,
        "**/*.class": true,
        "**/.classpath": true,
        "**/.project": true,
        "**/.settings": true,
        "**/.factorypath": true
    }
}

注意

  • 如果你想要使用以上配置文件,请将 lsunch.json 文件中的调试器路径改为你的相应路径示例如下
  • "miDebuggerPath": "E:\mingw-w64\mingw64\bin\gdb.exe" // 调试器路径,Windows 下后缀不能省略,Linux 下则不要

用户设置和工作空间设置

  • 用户设置:这种方式进行的设置,会适用于该用户打开的所有工程/实例

  • 工作空间设置:工作空间是指使用VScode打开的某个文件夹,在该文件夹下会创建一个名为。vscode的文件夹,保存着项目的相应设置。工作空间的设置会覆盖用户的设置。

  • vscode 的配置文件 setting.json 的 UI 界面或者 json 形式

  1. UI 界面
    • 进入设置界面,按下快捷键Ctrl + , 进入设置,可以选择用户设置或者工作区设置
  2. json 形式界面
    • 按下快捷键`Ctrl + Shift + P``,输入 Preferences: Open User Settings 或 Preferences: Open Workspace Settings。可以进入相应设置。

每个人都有自己的偏好,在使用 VS Code 进行开发时,都会根据自己的习惯来对 VS Code 进行用户级别的配置。但是,当多人共同完成某个项目的时候,该项目会有一定的编码规范,如: 编辑某个语言时的设置,代码的缩进等等,这个时候就需要对该项目进行单独的工作空间级别的设置。

在 UI 界面中,将鼠标放到设定左边的空白位置会显示出一个齿轮,其中有重置设定/复制设定/复制设定到 json 三个选项. 因此在团队协助中, 可以很轻松地分享项目的特定设置.

  • 参考文章,除上述之外,还有针对特定的语言的编辑设定,以及安全性设定,现在暂时不深入研究

牛刀小试

[图片上传失败...(image-db8746-1584417703346)]

常见错误

  • 找不到.exe 文件,大概率是以为文件名包含中文,去除文件名中的中文即可
  • 其他错误参考文章 → zhihu

总结

  • 安装完 MingW 并添加环境变量之后,我们其实是可以直接编程的,但是你必须要会要学会一些基本 shell 命令,比如你写了一个A.cpp文件,在命令行中输入 g++ A.cpp就会在当前目录下编译生成一个 A.exe 的可执行文件,此时你点击运行 exe 文件即可运行(一步操作:g++ -o A.cpp也可)。如果你想要调试,命令行 gdb A.exe
  • 以上就是在命令行界面中简单的编译运行一个 c++ 文件,其实 VScode 本质是一个编辑器,想要利用他来编译运行调试 C++文件,我们就必须配置几个文件,让他自动帮我们输入一些命令,并实现 UI 界面;如果给编辑器配置上编译环境,那么那就是一个 IDE(集成开发环境)
  • 配置完环境变量一定要测试一下是否成功,不成功可以重启电脑再测试
  • 报错的时候能将错误的关键要点找出来,否则上网也找不出是啥原因
  • 一些关键词:GCC、gcc、g++、gdb、MingW、clang、MSVC

Reference


版权声明:本文为原创文章,版权归本博客所有,转载请注明出处!
所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
个人博客:https://www.betterman.xyz

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容