[Unity学习教程] 玩转VS code 之 C/C++ 环境配置篇

[复制链接]
查看1228 | 回复0 | 2023-8-23 12:08:04 | 显示全部楼层 |阅读模式 来自 中国北京
PS:俺是菜鸟,整理和踩坑试错花了不少时间,假如这篇文章对您有效的话,请贫苦您留下免费的赞赞,赠人玫瑰,手留余香,码字踩坑不易,望三连支持
  上一篇:玩转 VS code 之下载篇

Msys2

MinGW也可以,但我用的是msys2
下载Msys2

所在:MSYS2
 
 安装Msy2


 无脑同意直到竣事
 
 完成mingw工具链安装

打开页面

 输入下令,更新(安装文件是最新的可以直接下一步)
  1. pacman -Syu
复制代码

更新完毕以后会欺压关闭终端,从开始菜单运行“MSYS2 MSYS”
使用以下下令更新别的基本软件包
  1. pacman -Syu
复制代码
 输入以下下令完成mingw工具链安装
  1. pacman -S --needed base-devel mingw-w64-x86_64-toolchain
复制代码

 查抄编译器配置是否乐成

编译器安装完成后,win+R在cmd窗口输入依次下面俩条下令,查抄编译器配置是否乐成
  1. gcc -v
复制代码

  1. gdb -v
复制代码

C/C++ 环境配置 

由于配置了C++环境,C语言也能直接用,我就直接配置C++的了
小白版

经我几经踩坑测试删减而成,亲测可用(一把酸楚泪)
背面另有进阶版,要改的一样,但是多了许多参数和解释,有爱好滴大佬可以看一下
改几处即可快速上手使用使用,要改的已经标出,根据本身安装路径进行更改

 先建一个叫做.vscode的文件夹(放配置文件滴,源代码不要放进去,放进去会咋样我也不道啊)
然后在里面建4个一样名字的json文件,把我的代码放进去,然后,修改几处标出的地方就可以了
launch.json

  1. {
  2.     "version": "0.2.0",
  3.     "configurations": [
  4.         {
  5.             "name": "弹窗输出",
  6.             "type": "cppdbg",
  7.             "request": "launch",
  8.             "program": "C:\\windows\\System32\\cmd.exe",
  9.             "args": [
  10.                 "/C",
  11.                 "${fileDirname}\\${fileBasenameNoExtension}.exe",
  12.                 "&",
  13.                 "pause"
  14.             ],
  15.             "cwd": "${fileDirname}",
  16.             "environment": [],
  17.             "externalConsole": true,
  18.             "MIMode": "gdb",
  19.             "miDebuggerPath": "F:\\vscode\\MSY\\MSY2\\ucrt64\\bin\\gdb.exe", //改成自己的路径的gdb.exe
  20.             "setupCommands": [
  21.                 {
  22.                     "description": "为 gdb 启用整齐打印",
  23.                     "text": "-enable-pretty-printing",
  24.                     "ignoreFailures": true
  25.                 },
  26.                 {
  27.                     "description": "将反汇编风格设置为 Intel",
  28.                     "text": "-gdb-set disassembly-flavor intel",
  29.                     "ignoreFailures": true
  30.                 }
  31.             ],
  32.             "preLaunchTask": "mytask"
  33.         },
  34.         {
  35.             "name": "终端输出",
  36.             "type": "cppdbg",
  37.             "request": "launch",
  38.             "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
  39.             "cwd": "${fileDirname}",
  40.             "environment": [],
  41.             "externalConsole": false,
  42.             "MIMode": "gdb",
  43.             "miDebuggerPath": "F:\\vscode\\MSY\\MSY2\\ucrt64\\bin\\gdb.exe", //改成自己的路径的gdb.exe
  44.             "setupCommands": [
  45.                 {
  46.                     "description": "为 gdb 启用整齐打印",
  47.                     "text": "-enable-pretty-printing",
  48.                     "ignoreFailures": true
  49.                 },
  50.                 {
  51.                     "description": "将反汇编风格设置为 Intel",
  52.                     "text": "-gdb-set disassembly-flavor intel",
  53.                     "ignoreFailures": true
  54.                 }
  55.             ],
  56.             "preLaunchTask": "myrun"
  57.         }
  58.     ]
  59. }
复制代码
tasks.json

  1. {
  2.     "version": "2.0.0",
  3.     "tasks": [
  4.         {
  5.             "type": "shell",
  6.             "label": "mytask",
  7.             "command": "F:\\vscode\\MSY\\MSY2\\ucrt64\\bin\\g++.exe", //改成自己的路径
  8.             "args": [
  9.                 "-fexec-charset=gbk",
  10.                 "-g",
  11.                 "${file}",
  12.                 "-o",
  13.                 "${fileDirname}\\${fileBasenameNoExtension}.exe",
  14.             ],
  15.             "problemMatcher": [
  16.                 "$gcc"
  17.             ],
  18.             "group": "build",
  19.             "detail": "弹窗输出"
  20.         },
  21.         {
  22.             "type": "shell",
  23.             "label": "myrun",
  24.             "command": "F:\\vscode\\MSY\\MSY2\\ucrt64\\bin\\g++.exe", //改成自己的路径
  25.             "args": [
  26.                 "-g",
  27.                 "${file}",
  28.                 "-o",
  29.                 "${fileDirname}\\${fileBasenameNoExtension}.exe"
  30.             ],
  31.             "options": {},
  32.             "problemMatcher": [
  33.                 "$gcc"
  34.             ],
  35.             "group": "build",
  36.             "detail": "终端内输出"
  37.         },
  38.         {
  39.             "type": "cppbuild",
  40.             "label": "run",
  41.             "command": "F:\\vscode\\MSY\\MSY2\\ucrt64\\bin\\g++.exe", //改成自己的路径
  42.             "args": [
  43.                 "-g",
  44.                 "${file}",
  45.                 "-o",
  46.                 "${fileDirname}\\${fileBasenameNoExtension}.exe"
  47.             ],
  48.             "options": {},
  49.             "problemMatcher": [
  50.                 "$gcc"
  51.             ],
  52.             "group": "test",
  53.             "detail": "终端内输出"
  54.         }
  55.     ]
  56. }
复制代码
c_cpp_properties.json

  1. {
  2.     "configurations": [
  3.         {
  4.             "name": "Win32",
  5.             "includePath": [
  6.                 "${workspaceFolder}/**"
  7.             ],
  8.             "defines": [
  9.                 "_DEBUG",
  10.                 "UNICODE",
  11.                 "_UNICODE"
  12.             ],
  13.             "compilerPath": "F:\\vscode\\MSY\\MSY2\\ucrt64\\bin\\g++.exe", //改成自己的路径
  14.             "cStandard": "gnu17",
  15.             "cppStandard": "gnu++17",
  16.             "intelliSenseMode": "${default}"
  17.         }
  18.     ],
  19.     "version": 4
  20. }
复制代码
settings.json

这个不太重要,好像没有都能跑代码
  1. {
  2.     "files.associations": { //配置语言的文件关联,优先级高于已安装语言的默认关联。
  3.         "ostream": "cpp"
  4.     },
  5.     "workbench.editor.autoLockGroups": {
  6.         "workbench.input.interactive": true //交互窗口
  7.     },
  8.     "files.autoGuessEncoding": true, //编辑器将尝试在打开文件时猜测字符集编码。还可以按语言配置此设置.
  9.     "files.encoding": "gbk" //在读取和写入文件时使用的默认字符集编码。
  10. }
复制代码
留意

系统弹出的小黑窗是gbk编码(chcp 936) 用chcp 可以检察 编码格式
用 chcp + 对应编码代码可以暂时更改编码格式,chcp 936即可改为gbk格式

而vscode的默认编码是utf-8,它的终端也是 (chcp 65001)
编码格式差别,有时使用中文会乱码
文件乱码,我们可以选择正确的编码格式重新打开,就正常了
但是输出乱码就贫苦了,颠末踩坑,我的代码可以制止大部分的乱码
我设置了三个输出方式,俩个是终端内输出,一个是弹出窗输出,保举弹出框(基本没题目)

 可以右上角启动,也可以左上角启动,保举左边的(有下拉框)

 也可以F5快捷键调试
使用终端输出的时间,输出别有弹窗,否则,弹窗里的字是乱码的,但是终端立的正常
举个栗子
 
 这时该咋整呢?
都有弹窗了,那肯定用弹窗输出呗

以是首推弹窗式,但是正常都能用
(假如这都不行的话,那我也没办法,菜鸟水平就到这里了,别的我也不会昂) 
大家版

小白进阶版,要改的一样,但是多了许多东西,只有俩个大改,另有俩个一样的,从上面拿呗
核心内容大同小异(小白版是这里精炼下来滴),胜在解释多,可选参数多
launch.json

  1.     // 使用 IntelliSense 了解相关属性。
  2.     // 悬停以查看现有属性的描述。
  3.     // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
  4.     // launch.json指导了运行和调试。
  5.     // 用调试器gdb我们就可以逐步运行我们的程序并且监视运行的情况,从而找出bug。
  6.     {
  7.         "version": "0.2.0",
  8.         "configurations": [
  9.             //配置列表。使用 IntelliSense 添加新配置或编辑现有配置。
  10.             {
  11.                 "name": "弹窗输出", //配置名称;显示在启动配置下拉菜单中。
  12.                 "type": "cppdbg", //配置类型。 cppdbg: C++ (GDB/LLDB)
  13.                 "request": "launch", //请求配置类型。可以是“启动”或“附加”。
  14.                 // 第一种写法,另一个看下面的案例
  15.                 "program": "C:\\windows\\System32\\cmd.exe", //打开cmd
  16.                 "args": [
  17.                     "/C",
  18.                     "${fileDirname}\\${fileBasenameNoExtension}.exe", //程序可执行文件的完整路径。
  19.                     "&", // 连接多个命令
  20.                     "pause" //避免程序运行完后闪退,相当于c++的system("pause");
  21.                 ],
  22.                 "stopAtEntry": false, //可选参数。如果为 true,则调试程序应在目标的入口点处停止。如果传递了 processId,则不起任何作用。
  23.                 "cwd": "${workspaceFolder}", //目标的工作目录。
  24.                 "environment": [ //要添加到程序环境的环境变量
  25.                     //比如: [ { "name": "config", "value": "Debug" } ],而不是 [ { "config": "Debug" } ]。
  26.                 ],
  27.                 "externalConsole": true, //如果为 true,则为调试对象启动控制台。如果为 false,它在 Linux 和 Windows 上会显示在集成控制台中。
  28.                 "MIMode": "gdb", //指示 MIDebugEngine 要连接到的控制台调试程序。允许的值为 "gdb"、"lldb"。
  29.                 "miDebuggerPath": "F:\\vscode\\MSY\\MSY2\\ucrt64\\bin\\gdb.exe", //MI 调试程序(如 gdb)的路径。如果未指定,将首先在路径中搜索调试程序。
  30.                 /*修改成自己bin目录下的gdb.exe,这里的路径和电脑里复制的文件目录有一点不一样,这里是两个反斜杠\\*/
  31.                 "setupCommands": [ //为了安装基础调试程序而执行的一个或多个 GDB/LLDB 命令
  32.                     {
  33.                         "description": "为 gdb 启用整齐打印", //此命令的可选说明。
  34.                         "text": "-enable-pretty-printing", //要执行的调试命令。
  35.                         "ignoreFailures": true //此命令的可选说明。
  36.                     }
  37.                 ],
  38.                 "preLaunchTask": "mytask" //调试会话开始前要运行的任务,是之前在task里的第一个label(自定义名字)
  39.             },
  40.             {
  41.                 "name": "终端输出",
  42.                 "type": "cppdbg",
  43.                 "request": "launch",
  44.                 //第二种写法
  45.                 "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", //程序可执行文件的完整路径。
  46.                 "args": [
  47.                     //传递给程序的命令行参数。
  48.                 ],
  49.                 "stopAtEntry": false, //可选参数。如果为 true,则调试程序应在目标的入口点处停止。如果传递了 processId,则不起任何作用。
  50.                 "cwd": "${fileDirname}", //目标的工作目录。
  51.                 "environment": [], //要添加到程序环境的环境变量
  52.                 "externalConsole": false, //默认false,即不打开小黑窗,直接在vscode终端输出,vscode右上角的就是如此
  53.                 // 注意 弹出窗口是系统的,gbk编码,终端的是默认utf-8,中文可能会乱码,嫌麻烦可以直接改true
  54.                 "MIMode": "gdb", //指示 MIDebugEngine 要连接到的控制台调试程序。允许的值为 "gdb"、"lldb"。
  55.                 "miDebuggerPath": "F:\\vscode\\MSY\\MSY2\\ucrt64\\bin\\gdb.exe", //MI 调试程序(如 gdb)的路径。如果未指定,将首先在路径中搜索调试程序。
  56.                 /*修改成自己bin目录下的gdb.exe,这里的路径和电脑里复制的文件目录有一点不一样,这里是两个反斜杠\\*/
  57.                 "setupCommands": [ //为了安装基础调试程序而执行的一个或多个 GDB/LLDB 命令
  58.                     {
  59.                         "description": "为 gdb 启用整齐打印", //任务说明
  60.                         "text": "-enable-pretty-printing", //要执行的调试命令
  61.                         "ignoreFailures": true //如果为 true,应忽略此命令的失败。默认值为 false。
  62.                     },
  63.                     {
  64.                         "description": "将反汇编风格设置为 Intel", //任务说明
  65.                         "text": "-gdb-set disassembly-flavor intel", //要执行的调试命令
  66.                         "ignoreFailures": true //如果为 true,应忽略此命令的失败。默认值为 false。
  67.                     }
  68.                 ],
  69.                 // "preLaunchTask": { //调试会话开始前要运行的Grunt任务。
  70.                 //     "task": "mytask",//要自定义的Grunt 任务。
  71.                 //     "type": "grunt",
  72.                 //     "args": [],//要传递给 grunt 任务的命令行参数
  73.                 //     "file": ""//提供任务的 Grunt 文件。可以省略。
  74.                 // },
  75.                 "preLaunchTask": "mytask" //调试会话开始前要运行的任务,是之前在task里的第一个label(自定义名字)
  76.             }
  77.         ]
  78.     }
复制代码
tasks.json

  1. // tasks.json会指导vsc编译、运行你的文件。
  2. // See https://go.microsoft.com/fwlink/?LinkId=733558  // 查看官方文档
  3. // vsc会为你默认生成一个模板,如果你安装了C/C++ Extension,intellisense会为你解释每一行的意义。
  4. // 悬停以查看现有属性的描述。
  5. // ${file}        你窗口正在显示的这个文件
  6. // ${fileDirname}        ${file}所在的文件夹
  7. // ${fileBasenameNoExtension}        去掉文件尾名的文件名
  8. // ${workspaceFolder}        就是你最开始打开的文件夹,大写名字的那个
  9. {
  10.     "version": "2.0.0", // 配置的版本号。
  11.     "tasks": [ //任务配置。通常是外部任务运行程序中已定义任务的扩充。
  12.         {
  13.             "type": "shell", //定义任务是被作为进程 process 运行还是在 shell 中作为命令运行。
  14.             "label": "mytask", //取个名字,不过要记得,待会 launch.json 的 preLaunchTask 要用
  15.             "command": "F:\\vscode\\MSY\\MSY2\\ucrt64\\bin\\g++.exe", //执行编译的编译器或脚本的路径 //g++ 适合于C++。
  16.             "args": [ //方括号里是传给g++的命令行参数
  17.                 "-g", //指定输出文件的路径和名称
  18.                 "${file}", //指定要编译的是当前文件
  19.                 "-o", //指定输出文件的路径和名称
  20.                 "${fileDirname}\\${fileBasenameNoExtension}.exe", //承接上一步的-o,让可执行文件输出到源码文件所在的文件夹下的bin文件夹内,并且让它的名字和源码文件相同
  21.                 "-std=gnu++17", // 语言标准
  22.                 "-fexec-charset=GBK", // 生成的程序使用GBK编码
  23.                 "-fdiagnostics-color=always", //用于在编译时启用彩色输出以改善可读性
  24.                 // "-I", //头文件(自己写的)
  25.                 // "-lfunc", //外部库的名字
  26.                 // "-L./", //外部库的路径
  27.                 // "-Wall", // 开启额外警告
  28.                 // "-static-libgcc", // 静态链接libgcc
  29.                 // "F:\\vscode\\my vscode",
  30.             ],
  31.             "presentation": { //配置用于显示任务输出并读取其输入的面板。
  32.                 "echo": true, //控制是否将执行的命令显示到面板中。
  33.                 "reveal": "always", //控制运行任务的终端是否显示。可按选项 "revealProblems" 进行替代。
  34.                 "focus": false, //控制面板是否获取焦点。默认值为“false”。如果设置为“true”,面板也会显示。
  35.                 "panel": "new", // 控制是否在任务间共享面板。同一个任务使用相同面板还是每次运行时新创建一个面板。
  36.                 //new 每个进程创建新窗口
  37.                 "showReuseMessage": false, //控制是否显示“终端将被任务重用,按任意键关闭”提示。
  38.                 "clear": false //控制是否在执行任务之前清除终端。
  39.             },
  40.             "options": { // 其他命令选项
  41.                 "cwd": "${fileDirname}", //已执行程序或脚本的当前工作目录。如果省略,则使用代码的当前工作区根。
  42.                 "env": {}, //已执行程序或 shell 的环境。如果省略,则使用父进程的环境。
  43.                 // "shell": {} // 配置使用的 shell。
  44.             },
  45.             "problemMatcher": [
  46.                 //要使用的问题匹配程序。可以是一个字符串或一个问题匹配程序定义,也可以是一个字符串数组和多个问题匹配程序。
  47.                 "$gcc"
  48.             ],
  49.             "group": "build", //  将任务标记为可通过 "运行生成任务" 命令访问的生成任务。
  50.             "detail": "弹窗内输出" // 任务的其他详细信息。
  51.         },
  52.         { // 设置与上面的性质相同,都是构建任务
  53.             "type": "shell",
  54.             "label": "myrun",
  55.             "command": "F:\\vscode\\MSY\\MSY2\\ucrt64\\bin\\g++.exe", //改成自己的路径
  56.             "args": [ //其他参数见上一个
  57.                 "-g",
  58.                 "${file}",
  59.                 "-o",
  60.                 "${fileDirname}\\${fileBasenameNoExtension}.exe"
  61.             ],
  62.             "presentation": { //配置用于显示任务输出并读取其输入的面板。
  63.                 "echo": true, //控制是否将执行的命令显示到面板中。
  64.                 "reveal": "always", //控制运行任务的终端是否显示。可按选项 "revealProblems" 进行替代。
  65.                 "focus": false, //控制面板是否获取焦点。默认值为“false”。如果设置为“true”,面板也会显示。
  66.                 "panel": "new", // 控制是否在任务间共享面板。同一个任务使用相同面板还是每次运行时新创建一个面板。
  67.                 //new 每个进程创建新窗口
  68.                 "showReuseMessage": false, //控制是否显示“终端将被任务重用,按任意键关闭”提示。
  69.                 "clear": false //控制是否在执行任务之前清除终端。
  70.             },
  71.             "options": { // 其他命令选项
  72.                 "cwd": "${fileDirname}", //已执行程序或脚本的当前工作目录。如果省略,则使用代码的当前工作区根。
  73.                 "env": {}, //已执行程序或 shell 的环境。如果省略,则使用父进程的环境。
  74.                 // "shell": {} // 配置使用的 shell。
  75.             },
  76.             "problemMatcher": [
  77.                 "$gcc"
  78.             ],
  79.             "group": "build",
  80.             "detail": "终端内输出"
  81.         },
  82.         { //这个大括号里是‘运行(run)’任务,一些设置与上面的构建任务性质相同,此任务是组中的默认任务,vscode右上角三角形运行
  83.             "type": "cppbuild", // 要自定义的任务类型
  84.             "label": "run", //任务名称,点vscode 右上角运行的就是这个
  85.             "command": "F:\\vscode\\MSY\\MSY2\\ucrt64\\bin\\g++.exe", //执行编译的编译器或脚本的路径。
  86.             "args": [ //其他要传递给编译器或编译脚本的参数
  87.                 "-fdiagnostics-color=always",
  88.                 "-g",
  89.                 "${file}",
  90.                 "-o",
  91.                 "${fileDirname}\\${fileBasenameNoExtension}.exe", //执行exe文件,只需要指定这个exe文件在哪里就好
  92.             ],
  93.             "options": { // 其他命令选项
  94.                 "cwd": "${fileDirname}", //已执行程序或脚本的当前工作目录。如果省略,则使用代码的当前工作区根。
  95.                 "env": {}, //已执行程序或 shell 的环境。如果省略,则使用父进程的环境。
  96.                 // "shell": {}  // 配置使用的 shell。
  97.             },
  98.             "problemMatcher": [
  99.                 "$gcc"
  100.             ],
  101.             "group": {
  102.                 "kind": "test", //这一组是‘测试’组,将run任务放在test组里方便我们用快捷键执行
  103.                 "isDefault": true // 定义此任务是组中的默认任务,还是与应触发此任务的文件匹配的 glob。
  104.             },
  105.             "detail": "调试器生成的任务。" // 任务的其他详细信息。
  106.         }
  107.     ]
  108. }
复制代码




来源:https://blog.csdn.net/m0_74921567/article/details/132324926
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则