VScode安装c++竞赛环境(2025)
看前须知
本文章同时结合了Clang++的编译器优势和UCRT的运行时兼容性,使用URCT64
的运行时环境和基本工具链,加上Clang/Clang++
编译器和LLDB
调试器,打造现代化的C++单文件编译环境。
本文面向的对象:竞赛,如ACM/OI(CSP)/蓝桥杯等单文件、单线程编译运行c++的情况;或刚上手需要安装c/c++
环境的新手同志们
本文操作系统:Windows 11 23H2专业工作站版(所有64位的win11、win10系统都可使用)
本文章解决问题:为什么我的vscode无法运行c++?
0.在开始之前的操作
在开始之前,请你在此电脑
页面中查看
标签下确保你勾选了文件扩展名与隐藏的项目
下面分别是win11和win10启用的方法
安装vscode
vscode在官网上可以下载:
在百度中搜索vscode,点击下载即可安装
1.了解c++编译器并安装MSYS2
你需要知道一个c++文件是如何才能在你的电脑中运行的:
- 你写的是文本,而只有二进制才能运行。所以所谓的"编译器"就是解决将文本变成可执行文件的一个工具。
- vscode并不是一个IDE(集成开发环境),它就是一个可以安装插件的可扩展文本编辑器。也就是说,你如果不装编译器,你的vscode是无法解决编译问题的。
所以,我们当务之急是需要安装一个编译器,让c++能被编译运行
什么是MSYS2?为什么要安装MYSY2?
msys2打包了包括mingw在内的一大堆函数库包括gcc,g++,clang,clang++等众多编译器,以及多种shell乃至模拟了个Unix-like 环境
MSYS2(Minimal System 2)是一个为Windows操作系统设计的软件开发环境,它提供了一个模拟类Unix系统的命令行界面以及一系列工具和库。MSYS2是MSYS的独立改写版本,基于现代Cygwin和MinGW-w64,提供了更多的API支持和64位应用开发能力
ucrt64
是 MSYS2 提供的一种开发环境,它是基于 Windows Universal CRT(通用运行时库)的 64 位开发环境。
事实上,我们安装的MSYS2只是一个壳子,而内部我们会按需安装。本次安装我们以ucrt64
作为基底开发环境,选择mingw-w64-ucrt-x86_64
工具箱,使用clang/clang++
作为编译器,使用LLDB
作为debug调试器。
下载并安装MSYS2
可以在https://www.msys2.org/ 直接进行下载
但如果下载速度过慢,则可以在镜像网站中进行下载https://mirrors.tuna.tsinghua.edu.cn/msys2/distrib/x86_64/
注意需要拉到网页最底下,可以找到最新日期的安装包
双击打开文件,重复点击Next>
按钮,直至安装完成,在安装时会卡在50%
,稍等几分钟即可完成
安装完成后,自动会弹出msys2的界面,如果不小心关掉也没关系,我们可以在默认安装路径C:\msys64
下找到它并打开
小贴士:可以复制后,右键黑框,选择Paste
粘贴命令
双击后出现黑框,我们在里面输入以下命令:
sed -i "s#https\?://mirror.msys2.org/#https://mirrors.tuna.tsinghua.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist*
pacman -Syu
这两句话分别是为了配置镜像,使得下载速度更快。以及更新msys2系统
安装MYSY2中urct64环境的clang/LLDB包
执行完pacman -Syu
后,程序会退出,我们重新打开黑框,然后输入下面的命令
安装包含clang/clang++
编译器的整个工具,以及LLDB
调试器
pacman -S mingw-w64-ucrt-x86_64-clang mingw-w64-ucrt-x86_64-lldb
安装mingw-w64-ucrt-x86_64-toolchain
工具链,是UCRT
的运行时环境,同时也包含了基础的GCC/G++
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain
安装额外的clang
工具箱
pacman -S mingw-w64-ucrt-x86_64-clang-tools-extra
按回车确认列表
接着在:: Proceed with installation? [Y/n]
出现数,输入y
即可确认进行,最后和图一样即可
这样就安装好clang环境了
配置环境变量
选择环境变量
、双击Path
所在行、点击新建
、在空白行中加入C:\msys64\ucrt64\bin
按windows徽标
键,输入cmd
,然后输入clang -v
以及clang++ -v
,如果能显示以下信息,说明安装完成
2.配置vscode
必装三大插件:LSP、快速编译运行、可视化调试代码
注意!!如果clangd弹出下载lib库,或者代码提示没有运行,请看配置环境变量时,是否将C:\msys64\ucrt64\bin
移到首位!!
如果使用clang++
开发套件,那么必须的三大件是:
clangd
:Clangd 是一个基于 Clang 编译器的 Language Server Protocol (LSP) 实现,用于为各种代码编辑器提供智能的 C/C++ 编程支持。它通过 LSP 协议与编辑器通信,提供代码补全、语法检查、代码导航、代码格式化、代码重构等功能。简而言之,Clangd 是一个强大的工具,可以显著提升 C/C++ 开发体验。CodeRunner
用于一键生成命令编译运行CodeLLDB
可用GUI来Debug调试代码(注:若使用g++来编译运行,则需要额外的配置).
在.vscode
目录下新建三个文件并放入
请注意这三个文件只对当前工作区生效(即用vscode打开的当前文件夹)。
settings.json
用于配置code-runner,实质上code-runner就是将手打的编译命令clang++ test.cpp -o test.exe
一键生成并执行,实质上并没有什么神奇的 。launch.json
是用codeLLDB
生成后修改的,主要是用于断点调试。task.json
主要用于,在调试前自动编译运行一个新文件,其实就是预处理
settings.json
{
//规定clangd的位置,这是解决clangd无法被识别的最终方案
"clangd.path": "C:\\msys64\\ucrt64\\bin\\clangd.exe",
"clangd.arguments": [
//由于使用万能头文件,所以默认屏蔽掉插入头文件的操作
"--header-insertion=never",
//找到并使用特定的编译器驱动程序
"--query-driver=C:/msys64/ucrt64/bin/clang++.exe"
],
"clangd.fallbackFlags": [
"-std=c++14"
],
//cph和浏览器插件联动的效果
// "cph.general.defaultLanguage": "cpp",
// "cph.language.cpp.SubmissionCompiler": "GNU G++14 6.4.0", // 使用 C++14 标准
// "cph.language.cpp.Args": "-std=c++14 -O2", // -O2
//这里规定了CodeRunner一键生成的命令
"code-runner.executorMap": {
//这里默认c++文件用c++14标准编译,不过可以自己选择是否加 -std=c++14,如果保持默认就用下面这句话
//"cpp": "cd $dir && clang++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"cpp": "cd $dir && clang++ -std=c++14 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"c": "cd $dir && clang $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"python": "python -u",
},
//这两行分别是指示代码和终端的字体大小
"editor.fontSize": 22,
"terminal.integrated.fontSize": 20,
//下面是美化功能,美化完以后可以使用
// "code-runner.runInTerminal": true, //是否在终端中运行,选择是
// "editor.mouseWheelZoom": false, //是否可以让代码字体用CTRL+滚轮进行缩放,true就是可以
// "terminal.integrated.mouseWheelZoom": true, //是否可以让终端字体用CTRL+滚轮进行缩放,true就是可以
// "terminal.integrated.fontFamily": "CaskaydiaMono Nerd Font", //重要!!请和你刚才设置的字体一致
// "terminal.integrated.defaultProfile.windows": "PowerShell", //选择默认哪个终端打开编译
}
注意launch.json和task.json是配套的
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "clang++ build and debug active file",
"type": "lldb",
"request": "launch",
//fileBasenameNoExtension表示当前打开的文件的文件名,但不包括文件扩展名
//例如,如果当前打开的文件是 example.cpp,那么 fileBasenameNoExtension 的值将是 example
"program": "${fileDirname}/${fileBasenameNoExtension}.exe",
"args": [],
//cwd用于指定当前工作目录
//如果当前打开的是一个文件夹,${workspaceFolder} 就是这个文件夹的路径
"cwd": "${workspaceFolder}",
"preLaunchTask": "clang++ build" //这个名字需要和task.json的label名一致
}
]
}
task.json
{
"version": "2.0.0",
"tasks": [
{
//这个名字需要和launch.json的preLaunchTask名一致
"label": "clang++ build",
"type": "shell",
"command": "clang++", //使用什么命令
//命令的参数
"args": [
"-std=c++14", // 指定 C++14 标准
"-Wall", // 打开所有警告
"${fileDirname}\\${fileBasename}", //源文件名,在工作区的任何文件夹中都能使用
"-o", // 编译输出
"${fileDirname}\\${fileBasenameNoExtension}.exe", //输出名,在工作区的任何文件夹中都能使用
"-g" // 带调试信息
],
//下面参数对于单文件意义不大
"group": {
//表示这个任务属于 构建组(build group)。构建组的任务通常用于编译或构建项目。
"kind": "build",
//表示这个任务是其所属组(这里是 build 组)的 默认任务。
"isDefault": true
}
}
]
}
此时,已经安装完成,我们可以按快捷键CTRL+ALT+N
进行CodeRunner
的运行
关于clangd无法被识别的问题是如何解决的
在settings.json
中强制规定clangd
的位置,这个方法百分百奏效
//规定clangd的位置
"clangd.path": "C:\\msys64\\ucrt64\\bin\\clangd.exe",
"clangd.arguments": [
//由于使用万能头文件,所以默认屏蔽掉插入头文件的操作
"--header-insertion=never",
//找到并使用特定的编译器驱动程序
"--query-driver=C:/msys64/ucrt64/bin/clang++.exe"
],
"clangd.fallbackFlags": [
"-std=c++14"
],
//这里规定了CodeRunner一键生成的命令
"code-runner.executorMap": {
//这里默认c++文件用c++14标准编译,不过可以自己选择是否加 -std=c++14,如果保持默认就用下面这句话
//"cpp": "cd $dir && clang++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"cpp": "cd $dir && clang++ -std=c++14 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"c": "cd $dir && clang $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"python": "python -u",
},
使用PowerShell7的运行效果
设置断点,按F5
即可进行调试,按F9
单步调试两次后效果如下:
可选插件
1.CPH编程竞赛扩展工具
Competitive Programming Helper (CPH) 是一款专为编程竞赛设计的 Visual Studio Code (VS Code) 扩展工具,旨在帮助参赛者更高效地进行竞赛编程。
主要功能:
- 快速编译、运行和评判:CPH 允许用户在 VS Code 内快速编译、运行代码,并对竞赛题目进行评判。
- 自动下载测试用例:通过与 Competitive Companion 浏览器扩展配合使用,CPH 可以自动从竞赛平台(如 Codeforces、Codechef、TopCoder 等)下载测试用例。
- 本地测试与提交:用户可以在本地编写和测试自己的问题,并通过 CPH 直接提交解决方案。
- 支持多种编程语言:CPH 支持 C++、C、Rust、Python、Java 等多种编程语言
3.美化终端
3.1安装PowerShell7
众所周知,windows自带的PowerShell是旧版的还有广告,如果要一个强大的命令行终端,那么PowerShell的最新版就是最好的选择。
在 https://github.com/PowerShell/PowerShell/releases/ 下载最新版powershell7并安装
如果无法下载,可以在微软商店中下载
无脑下一步安装完毕,进入cmd后右键边框,选择设置,将安装后的PowerShell7作为首选项
3.2安装oh-my-posh
Oh My Posh 是一个跨平台、高度可定制的终端提示符引擎,支持多种 Shell 环境,包括 PowerShell、bash、zsh 等。它可以让终端的提示符更加美观和实用,同时提供丰富的自定义选项
下载地址:https://github.com/JanDeDobbeleer/oh-my-posh/releases
如果无法下载,可以在微软商店中下载
无脑下一步,安装成功后可以在powershell7中输入oh-my-posh
,显示下面信息代表安装成功
3.3在PowerShell7中使用oh-my-posh
1.新建配置文件
New-Item -Path $PROFILE -Type File -Force
2.用记事本打开配置文件(下面都指的是这个打开的配置文件)
notepad $PROFILE
3.在打开的文件中加入下面这句话
oh-my-posh init pwsh | Invoke-Expression
4.输入下面这句话,查看所有可以用的皮肤
Get-PoshThemes
5.在配置文件中修改原来的oh-my-posh init pwsh | Invoke-Expression
,把这句话替换成下面的。其中montys.omp.json
是你在皮肤里面选择的一个喜欢的名字
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\montys.omp.json" | Invoke-Expression
6.安装windows文件夹等徽标(可选)
Install-Module -Name Terminal-Icons -Repository PSGallery
然后在配置文件中加入:
Import-Module Terminal-Icons
最后配置状态如下:
打开PowerShell7,此时会出现下面这样的乱码情况,这是因为皮肤里面的图标需要特殊字体
解决图标乱码:下载和配置Nerd字体
Nerd Fonts 是一个开源项目,旨在为开发者提供带有大量图标和符号的字体集合。这些字体通过集成来自流行图标集(如 Font Awesome、Devicons、Octicons 等)的额外图标,增强了传统编程字体的功能。
https://www.nerdfonts.com/font-downloads 在这里下载你喜欢的字体
我选择的是CaskaydiaMono Nerd Font
打开压缩包,将所有TTF
文件解压缩到C:\Windows\Fonts
文件夹下
同样的,右键边框进入设置,选择刚才你下载的nerd字体,然后保存,重新打开PowerShell
你会发现图标生成了。
3.4在VScode中使用刚才调好的powershell7
注意这里最关键的是"terminal.integrated.fontFamily": "CaskaydiaMono Nerd Font"
,在这里必须填入刚才你选择的字体。"terminal.integrated.defaultProfile.windows": "PowerShell"
是选择PowerShell7作为默认终端打开
只需要将settings.json
文件中修改成下面这个样子即可:
{
//规定clangd的位置
"clangd.path": "C:\\msys64\\ucrt64\\bin\\clangd.exe",
"clangd.arguments": [
//由于使用万能头文件,所以默认屏蔽掉插入头文件的操作
"--header-insertion=never",
"--query-driver=C:/msys64/ucrt64/bin/clang++.exe"
],
"clangd.fallbackFlags": [
"-std=c++14"
],
//cph和浏览器插件联动的效果
// "cph.general.defaultLanguage": "cpp",
// "cph.language.cpp.SubmissionCompiler": "GNU G++14 6.4.0", // 使用 C++14 标准
// "cph.language.cpp.Args": "-std=c++14 -O2", // -O2
//这里规定了CodeRunner一键生成的命令
"code-runner.executorMap": {
//这里默认c++文件用c++14标准编译,不过可以自己选择是否加 -std=c++14,如果保持默认就用下面这句话
//"cpp": "cd $dir && clang++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"cpp": "cd $dir && clang++ -std=c++14 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"c": "cd $dir && clang $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"python": "python -u",
},
//这两行分别是指示代码和终端的字体大小
"editor.fontSize": 22,
"terminal.integrated.fontSize": 20,
"code-runner.runInTerminal": true, //是否在终端中运行,选择是
"editor.mouseWheelZoom": false, //是否可以让代码字体用CTRL+滚轮进行缩放,true就是可以
"terminal.integrated.mouseWheelZoom": true, //是否可以让终端字体用CTRL+滚轮进行缩放,true就是可以
"terminal.integrated.fontFamily": "CaskaydiaMono Nerd Font", //重要!!请和你刚才设置的字体一致
"terminal.integrated.defaultProfile.windows": "PowerShell", //选择默认哪个终端打开编译
}
最后测试效果如下:
3.5其他功能性插件
1.PSReadLine
PSReadLine 提供语法高亮、错误提示、多行编辑、键绑定、历史记录搜索等功能,提升命令行体验。
Install-Module PSReadLine
2.posh-git
posh-git 可以在 PowerShell 中显示 Git 状态信息,并提供 Git 命令的自动补全。
Install-Module posh-git
在 PowerShell 配置文件 ($PROFILE
) 中添加以下行以启用该插件:
Import-Module posh-git
3.ZLocation
ZLocation 插件类似于 autojump
或 Zsh-z
,通过关键字直接跳转到指定目录,提升效率。
安装 ZLocation 插件:
Install-Module ZLocation
修改配置文件:
打开 PowerShell 配置文件:
notepad $PROFILE
在文件末尾添加:
Import-Module ZLocation
3.6最终powershell配置
# 引入所需模块
Import-Module Terminal-Icons
Import-Module PSReadLine
Import-Module posh-git
Import-Module ZLocation
# 初始化 oh-my-posh
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\montys.omp.json" | Invoke-Expression