快速在 Windows 下搭建轻巧方便的 C++ 命令行与开发环境

工欲善其事必先利其器,对于把代码,环境搭得好不好,方不方便,会很大程度上影响到后续效率。由于有些不得已的情况必须在 Windows 下做开发以及嫌弃虚拟机性能问题以及方便性,经过摸爬滚打,本文总结了一套可以在 Windows 下开发 C/C++ 的轻巧(练习)开发环境。

关键词: Cmder, Visual Studio Code, MSYS2, MinGW, GIT, WSL, Cygwin, GDB, Clang, LLVM

Compiler/Debugger/Editor/Commander Line Tool Selection

C/C++ Compiler

上方列表中的第二条我们可以看到的 MingGW 系列的编译环境主要是用于开发 Windows Native 的应用,也就是说编译出来的应用可以直接脱离此开发环境直接在 Windows 操作系统中运行;而 Cygwin 则主要是负责提供一层 POSIX 兼容层,让环境依赖与 POSIX (*nix) 下接近甚至相同,但是应用要在 Windows 上运行需要带上 cygwin1.dll 并且收到相关开源协议限制。两者的共同点便是都提供了 GNU Compiler Collections 在 Windows 上的 Porting. 至于 WSL, 个人觉得他类似与 Cygwin, 但是更接近 Linux 原生,也由于安装需要使用 Windows App Store,本文不选用这一方案。 更多信息可以参考后面的 Reference 区域。 关于 MSYS2 的选择原因则是 MSYS2 提供了一个方便的包管理工具 Pacman 方便开发者快速更新他们所使用的环境。 另外 Clang 的 Windows 安装包没有头文件的问题可以从其他地方复制来解决(如安装 MingGW),但是由于 debugger - LLDB 可能会有坑就暂时不讨论,如果想使用 Clang 整个过程应该差不多,考虑到 MSYS2 同样可以方便地下载 Clang Toolchain.

而由于搭建本环境不是主要面向与操作系统不打算开发有关于 POSIX 或 Windows 底层操作系统的应用,而是以算法与C/++特性练习为主的环境,因此以方便选择标准。

Editor

  • Sublime
  • Visual Studio Code
  • Atom
  • ???

纯属个人喜好,从配置的方便性以及启动速度来看选择了比较均衡的 VSCode。

Commander Line Tool

  • Cmd
  • Powershell
  • Cmder

自然选择 Cmder,主要原因是漂亮的界面以及灵活的环境配置,Commander Line Tool 主要会被用于不打开编辑器的情况下打开相关命令行。

Quick Setup

安装 MSYS2 并下载 MinGW-w64

建议将此类程序都安装在类似于 d:/apps/xxx 的英文目录,以免受到 Windows 权限控制干扰。

首先下载安装 MSYS2, 并配置好 Windows 环境变量 MSYS2_ROOT 为 MSYS2 所在目录,方便后续配置 Cmder 时使用。

之后打开 MSYS2 并运行如下命令搜索需要的 MinGW 的 GCC 和 GDB 的包名。

1
2
pacman -Ss gcc
pacman -Ss gdb

安装两个包

1
2
mingw64/mingw-w64-x86_64-gcc
pacman -S mingw64/mingw-w64-x86_64-gdb

添加 MinGW 的路径到 MSYS2 的 PATH 变量

1
echo "export PATH=\$PATH:/mingw64/bin" >> ~/.bashrc

最重要的 C/C++ 环境配置好了。 以后我们将主要使用 MSYS2 作为命令行环境,同时用它来升级管理安装好的包。

安装 Cmder 并配置为 MSYS2 环境

Cmder 可以直接使用最小安装,之后再到 Setting-Startup-Commend line 中设置为如下命令即可让 Cmder 自动启动 MSYS 环境。

1
set "MSYSTEM=MSYS"& set "MSYS2_PATH_TYPE=inherit"& set "CHERE_INVOKING=1"& cmd /c "%MSYS2_ROOT%\usr\bin\bash -login -i" -new_console:n

上面这条命令的具体解释可以参考 Reference 中的 Integrate MSYS2 into Cmder - zyzyz's Playground 条目。

安装 VSCode 并配置 Integrated Terminal 和 C/C++ 插件

最后就是配置 VSCode 集成 Terminal 和 C++ 的语法提示和调试器了。

修改 VSCode 集成命令行配置:

1
2
3
4
5
6
7
{
"terminal.integrated.shell.windows": "path_to_msys2\\usr\\bin\\bash.exe", // you should change the path_to_msys2 here
"terminal.integrated.shellArgs.windows": [
"-i"
],
"terminal.integrated.env.windows": {"PATH": "/mingw64/bin:/usr/bin"} // the path env variable you want to add to
}

最后,安装 VSCode 的 C/C++ 插件,并进入设置,

添加以下 configuration 即可实现自动补全

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"name": "MinGW",
"includePath": [
"${workspaceFolder}/**",
"D:\\app\\msys64\\mingw64\\include\\c++\\8.2.1",
"D:\\app\\msys64\\mingw64\\include"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "D:\\app\\msys64\\mingw64\\bin\\gcc.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}

在 launch.json 中,修改以下配置以使用 GDB 在VSCode 中调试代码

1
2
3
{
"miDebuggerPath": "D:\\app\\msys64\\mingw64\\bin\\gdb.exe",
}

若不在此 debug 配置中增加自动编译任务,那么需要手动在命令行中编译。另外调试前需要使用 -g FLAG 对程序进行编译。

注意前文提到的路径接需要根据实际安装路径修改。 至此,大功告成,请愉快地享受 coding 的乐趣吧。

Reference