众所周知 Visual Studio Code 是一个优秀的编辑器。
众所周知 MSYS2 是一个方便快捷的开发环境部署工具。
众所周知 https://mirrors.tuna.tsinghua.edu.cn/ 是一个宝藏网站。
众所周知 https://mirrors.bfsu.edu.cn/ 是另一个宝藏网站。
GCC 的安装与环境变量的配置
首先你需要安装 MinGW 或者 MSYS2 (推荐使用后者,切换镜像源后速度非常快,安装和更新非常方便)(如果你使用 Linux 操作系统,那么忽略这一步)。
使用 MSYS2 的亿点提示
MSYS2 可以在上面所述网站右侧“获取下载链接”处获取.
- 修改软件源
目测 bfsu 速度比 tuna 快不少,大概是访问流量的原因。
亲身经历,以前有时候自动更新会把改过的源地址覆盖掉,又得重新配置(现在可能不会了?)。所以我在~/.bashrc
底下加了两行,每次打开 MSYS2 就把镜像源改成 bfsu ,其他地址直接丢弃。
echo "Server = https://mirrors.bfsu.edu.cn/msys2/mingw/x86_64" > /etc/pacman.d/mirrorlist.mingw64
echo "Server = https://mirrors.bfsu.edu.cn/msys2/msys/\$arch" > /etc/pacman.d/mirrorlist.msys
echo "Server = https://mirrors.bfsu.edu.cn/msys2/mingw/ucrt64" > /etc/pacman.d/mirrorlist.ucrt64
echo "Server = https://mirrors.bfsu.edu.cn/msys2/mingw/clang64" > /etc/pacman.d/mirrorlist.clang64
好像现在没什么人用32位的电脑了?我在/etc/pacman.conf
里把 mingw32 相关的项目注释掉了,不知道我想得对不对。
之后执行命令pacman -Syu
更新软件,提示是否继续的时候直接回车也可以。
有时候会需要更新两次,第一次把 MSYS2 自己更新了,第二次才更新其他软件。
- 安装 GCC
执行命令pacman -Ss gcc
会列出很多结果,我们一般使用mingw64
系列的这个:
另外还会看到一个msys
系列的 GCC ,但是听说过好像有些接口差异/性能之类的原因,我不打算使用。
ucrt64
和clang64
系列应该是前不久才增加的,还没有研究过。
执行命令pacman -S mingw-w64-x86_64-gcc
安装 MinGW GCC 。
如果你还想要使用 vscode 的 F5 调试功能,还得安装 GDB 。
pacman -S mingw-w64-x86_64-gdb
配置环境变量
在你桌面的“此电脑”上右键,选择属性。得是一个真正的“此电脑”图标,快捷方式不行。
什么,你说你的桌面上没有真正的“此电脑”图标?
开始菜单 > 设置 > 个性化 > 主题 > (往下翻)桌面图标设置。
如果你属实不想要“此电脑”图标,那么进入设置 > 系统 > 关于,也是同样效果。
往下翻,找到“高级系统设置”,找到“环境变量”,找到“用户变量”(为当前用户配置)或者“系统变量”(为所有用户配置)里的Path
。
如果你使用 MSYS2 安装 mingw64 gcc 那么新建一条:<你的MSYS2安装目录>\mingw64\bin
,比如我的 MSYS2 安装在D:\msys64
,我的这条就是D:\msys64\mingw64\bin
。你可以去这个路径确认一下是不是有gcc.exe
之类的软件。如果你安装的是其他系列比如 msys 的 gcc 那可能要按实际情况把里面的mingw64
换成别的什么。如果你安装的不是 MSYS2 而是 MinGW ,那么按照你的实际情况操作。最后要点确定。
现在随便开一个 cmd 或者 powershell 什么命令行,看看执行 gcc 或者 g++ 有什么反应。
Visual Studio Code 的配置
建议把你刷题的代码放在一个文件夹里,每次都用 vscode 打开这个文件夹。
建议安装 Microsoft 的 C/C++ 插件(代码补全/高亮/调试运行)和 Jun Han 的 Code Runner 插件(快速运行,可自定义命令)。另外可以安装 clangd 插件(可以在 MSYS2 安装mingw-w64-x86_64-clang-tools-extra
)获得更强大的代码提示支持。
Code Runner 配置
- 用户设置
code-runner.runInTerminal
打开。默认程序会跑在 vscode 的“输出”窗,那里没法接收你的输入。
code-runner.ignoreSelection
打开。防止你选择了一段代码然后开始运行,结果 Code Runner 只把你选择的那部分抄下来跑。
code-runner.fileDirectoryAsCwd
推荐打开。这样编译的时候会先 cd 到你文件目录里去。
code-runner.saveFileBeforeRun
打开。
code-runner.executorMap
默认的运行命令有些缺陷,在文件名或路径存在空格/点号之类奇奇怪怪的情况下会出错。我把里面C/C++有关的项目改成了这个样子:
...
"c": "gcc $fileName -o $fileNameWithoutExt.exe && $dir$fileNameWithoutExt.exe",
"cpp": "g++ $fileName -o $fileNameWithoutExt.exe && $dir$fileNameWithoutExt.exe",
...
- 工作区设置
这里改一些方便刷题的设置。
code-runner.customCommand
改成:cd $workspaceRoot; ls * -include *.exe -recurse | rm
,这样按 Ctrl + Alt + K 会自动把你编译出的.exe
文件全部清理掉。
上面的截图里我在根文件夹建了个in.txt
和out.txt
,然后把它们放在边上,输入数据放在一边,输出数据会自动放到另一边。实现这样的效果可以改这里:
code-runner.executorMap
"cpp": "$workspaceRoot/out.txt && g++ $fileName -o $fileNameWithoutExt.exe && cat $workspaceRoot/in.txt | $dir$fileNameWithoutExt.exe > $workspaceRoot/out.txt"
【未完待续】