20230512-VSCode-配置C++17-win11-22h2
一、软件环境
- 标签:C++ VSCode w64devkit gcc12
- 分栏:C++
- 操作系统:Windows11 x64 22h2
- 编译器:vscode-1.78.2 w64devkit-1.18.0
二、操作步骤
1. 下载安装VScode
官网
打开官网【https://code.visualstudio.com/#alt-downloads】,选择【System Installer】【x64】,按住ctrl键点链接(这样从新窗口打开)。建议用下载工具下载。
保留到本地,当前最新版本为【1.78.2】。
安装VSCode
过程文字描述如下:
我同意;
选安装目录【C:\Program Files\Microsoft VS Code】;
开始菜单文件夹【Visual Studio Code】;
选择附加任务,勾选【全部】,如图:
点击安装,完成。
注:网盘备份位置【3-软件相关-software>1-IDE-编译器>1-vscode】。
2. 下载配置w64devkit-1.18.0
没有选择MinGW是因为最新版本支持到gcc-8.1,无法编译C++17下的filesystem库。
官网
打开官网【https://github.com/skeeto/w64devkit/releases/tag/v1.18.0】,选择【w64devkit-1.18.0.zip】;
如图:
保存到本地。
注:网盘备份位置【1-IDE-编译器>2-mingw】。
配置gcc环境变量
将压缩文件解压到【D:\1-libs\w64devkit-1.18.0】,该目录可自定义,路径【不要包含中文】;
进入bin目录【D:\1-libs\w64devkit-1.18.0\w64devkit\bin】,复制当前路径。
按win键搜索【env】,选择【编辑系统环境变量】,打开系统属性对话框,点击环境变量,如图;
选择用户变量,【Path】【编辑】,新建【D:\1-libs\w64devkit-1.18.0\w64devkit\bin】,如图;
点击三次确定,完成。
打开cmd,输入【gcc -v】验证。配置正确则显示【gcc version 12.2.0】,如图。
3. 配置VScode插件
- 打开VSCode,搜索插件【chinese】【C/C++】,安装后重启。
- 点击C/C++插件右正解的设置按钮【安装另一个版本】,切换C/C++插件至1.14.5版本。如图:
个人习惯不用最新版本,这里选1.14.5,也可以跳过这一步。
4. 测试代码
- 新建文件夹,改为英文名进入,用VSCode打开该文件夹
- 新建文本文件,命名为cpp17-filesystem-test.cpp(文本编码:Unix(LF),UTF-8),可用notepad++查看,如图
- 编写代码如下:
// cpp17-filesystem-test.cpp
// create: 2023-05-12 10:31:32
// w64devkit-1.18.0,开源库,gcc-12.2#include <iostream>#include <filesystem> //C++17namespace fs = std::filesystem;int main(int argc, char** argv)
{fs::path example_a = "H:\\2-git\\1-csdn-docs\\v0\\csdn_codes\\2023\\5\\12\\512a\\0-src";// fs::path example_a = "../";if (!fs::exists(example_a)){return -1;}std::cout << "string: " << example_a.string().c_str() << '\n';std::cout << "string: " << example_a.generic_string().c_str() << '\n'; //转斜杠std::cout << "Hello World!测试中文乱码!\n";return 0;
}
- 选中cpp文件后,点击VSCode菜单,运行,启动调试(或按F5),在下方【终端】可看到运行结果,如图。
5. 调整优化
程序正常运行后会在当前目录生成【.vscode】目录,该目录下会生成task.json文件,该文件可进行一些优化设置。
本文配置参考如下:
{"tasks": [{"type": "cppbuild","label": "C/C++: g++.exe 生成活动文件","command": "D:\\1-libs\\w64devkit-1.18.0\\w64devkit\\bin\\g++.exe","args": ["-fdiagnostics-color=always","-g","${file}","-o",//"${fileDirname}\\${fileBasenameNoExtension}.exe""${fileDirname}\\Debug\\a.exe"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "调试器生成的任务。"}],"version": "2.0.0"
}
5.1 将程序运行在外部控制台
- 设置终端编码为utf-8
方法是修改注册表【HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor】添加字符串【autorun】,值为【chcp 65001】,注意中间有空格。如图:
- 添加launch.json
点击VSCode左边栏的【运行和调试】,点击【创建launch.json】,如图:
修改内容如下:
{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "(gdb) 启动","type": "cppdbg","request": "launch","program": "${fileDirname}\\Debug\\a.exe",//这个地方和task.json保持一致"args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": true,//这个地方默认为false,改为true弹出cmd窗口"MIMode": "gdb",//"miDebuggerPath": "/path/to/gdb", //注释掉这一行"setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}],"preLaunchTask": "C/C++: g++.exe 生成活动文件"//这是默认文件后手动添加的,和task.json保持一致}]
}
注意注释位置描述的两个json文件要保持一致的地方。
按F5运行,正常情况会弹出终端,中文显示乱码。如图:
因为win11的终端utf-8有bug,所以不推荐用此方法。
5.2 中文乱码问题
win11暂时只能通过直接控制台运行a.exe解决乱码问题,或者只用VSCode的终端进行调试。如图:
5.3 修改exe输出目录
修改task.json如下,就能实现在Debug目录生成exe:
{"tasks": [{"type": "cppbuild","label": "C/C++: g++.exe 生成活动文件","command": "D:\\1-libs\\w64devkit-1.18.0\\w64devkit\\bin\\g++.exe","args": ["-fdiagnostics-color=always","-g","${file}","-o",//修改这个地方,Debug是自定义目录:"${fileDirname}\\${fileBasenameNoExtension}.exe""${fileDirname}\\Debug\\${fileBasenameNoExtension}.exe"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "调试器生成的任务。"}],"version": "2.0.0"
}
全文完。
参考文献
- 《VScode中配置C语言/C++运行环境》,火星动力猿,B站。
- 《将powershell、cmd和vscode终端的编码永久修改成utf-8》,夕阳的云。
更新历史
2023-05-12 10:07:43,创建,东盛苑。
2023-05-12 18:00:30,发布,CSDN上传。