Windows shell环境: 从git bash切换到msys2

文章目录

    • 1. 目的
    • 2. msys2 环境 (Environment)
    • 3. 升级 MSYS2: 使用 pacman 滚动式升级整个系统
    • 4. 在 Windows Terminal 中增加显示 MSYS2
    • 5. 使用 zsh
    • 6. VSCode 中的配置
      • 增加 MSYS2 终端
      • explorer 右键使用 MSYS UCRT64 打开
      • 配置 git 路径
    • 7. 安装 C/C++ 依赖库
      • 安装 ag
      • 查询 bison 和 flex 的安装目录
    • 8. References

Windows shell环境: 从git bash切换到msys2_第1张图片

1. 目的

想在 Windows 下编译一些 C++ 工程, 依赖库没有提供 CMake 支持,手动编译则需要递归编译所有依赖库, 过程预计比较复杂容易失败, 考虑使用预编译库。由于 GnuWin32 系列的预编译库普遍版本较低, 无法满足原本要编译的 doxygen 工程中的需求, 考虑使用 msys2 提供的预编译库, 如 bison 和 flex, 版本都很新。

使用 msys2 意味着需要删除 git bash, 原因是 git for windows 是基于 msys2 的, 两者都装容易冲突。 安装 msys2 后可以用包管理工具 pacman 安装 git.

2. msys2 环境 (Environment)

msys2 提供了不同的环境/子系统,使用 msys2 的第一件事是决定使用哪个环境/子系统。不同的 msys2 环境,差别在于:环境变量、默认的编译器和链接器、架构、系统库等。如果不确定, 那就用 UCRT64.

MSYS 环境包含了类 unix、基于 cygwin 的工具, 放在 /usr 目录, 并且是一直可以使用的。其他的环境则是在 MSYS 环境基础上增加内容得到的。

Windows shell环境: 从git bash切换到msys2_第2张图片

比如说, 在 UCRT64 环境中 $PATH 变量以 /ucrt64/bin:/usr/bin 开始, 意味着除了可以用 msys 系列的工具, 还可以使用所有基于 ucrt64 的工具。

切换不同的 msys 环境: 修改 MSYSTEM 环境变量即可(尝试了 export, 不过没生效);还有一种土方法,在开始菜单输入 MSYS2 然后选择需要的 Environment 对应的 shell:

Windows shell环境: 从git bash切换到msys2_第3张图片
关于GCC和LLVM/Clang

Windows shell环境: 从git bash切换到msys2_第4张图片
GCC 相关的测试比较充分,LLVM 的一大特点则是 ASan 支持(疑问:GCC 不带 ASan 吗?)。稳妥起见先用 GCC 的。

关于C RunTime library: MSVCRT vs UCRT

Windows shell环境: 从git bash切换到msys2_第5张图片

UCRT 比较新,可以当 MSVCRT 用。

3. 升级 MSYS2: 使用 pacman 滚动式升级整个系统

MSYS2 使用 pacman 作为包管理工具, 继承了 archlinux 下的滚动式升级特性。

更新所有包

pacman -Suy

Windows shell环境: 从git bash切换到msys2_第6张图片
包缓存目录

/var/cache/pacman/pkg 目录存放了缓存的包, 例如我的
Windows shell环境: 从git bash切换到msys2_第7张图片
可以定期手动删除包,减少硬盘占用。

4. 在 Windows Terminal 中增加显示 MSYS2

https://www.msys2.org/docs/terminals/

// This makes UCRT64 the default shell
"defaultProfile": "{17da3cac-b318-431e-8a3e-7fcdefe6d114}",
"profiles": {
  "list":
  [
    // ...
    {
      "guid": "{17da3cac-b318-431e-8a3e-7fcdefe6d114}",
      "name": "UCRT64 / MSYS2",
      "commandline": "C:/msys64/msys2_shell.cmd -defterm -here -no-start -ucrt64",
      "startingDirectory": "C:/msys64/home/%USERNAME%",
      "icon": "C:/msys64/ucrt64.ico",
      "font": 
      {
        "face": "Lucida Console",
        "size": 9
      }
    },
    {
      "guid": "{71160544-14d8-4194-af25-d05feeac7233}",
      "name": "MSYS / MSYS2",
      "commandline": "C:/msys64/msys2_shell.cmd -defterm -here -no-start -msys",
      "startingDirectory": "C:/msys64/home/%USERNAME%",
      "icon": "C:/msys64/msys2.ico",
      "font": 
      {
        "face": "Lucida Console",
        "size": 9
      }
    },
    // ...
  ]
}

Windows shell环境: 从git bash切换到msys2_第8张图片

5. 使用 zsh

pacman -S zsh

Windows shell环境: 从git bash切换到msys2_第9张图片
继续修改 Windows 终端中的 json 文件,加入参数 -shell zsh

Windows shell环境: 从git bash切换到msys2_第10张图片
安装git

pacman -S git

Windows shell环境: 从git bash切换到msys2_第11张图片
安装git后,可以安装 oh-my-zsh

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Windows shell环境: 从git bash切换到msys2_第12张图片

6. VSCode 中的配置

增加 MSYS2 终端

目的是在 VSCode 中按 Ctrl+J 时, 可以选择 MSYS2 终端, 就像 Git Bash 那样。
方法是 Ctrl + Shift + P 改 settings.json, 加入

    "terminal.integrated.profiles.windows": {
        "MSYS2 UCRT": {
            "path": "cmd.exe",
            "args": [
                "/c",
                "D:\\soft\\msys64\\msys2_shell.cmd -defterm -here -no-start -ucrt64 -shell zsh"
            ]
        }
    }

explorer 右键使用 MSYS UCRT64 打开

保存如下内容为 msys2_ucrt64.reg,注意检查和你的路径是否一致。双击运行。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\ucrt64]
@="UCRT64 Here"
"icon"="D:\\soft\\msys64\\ucrt64.ico"

[HKEY_CLASSES_ROOT\Directory\Background\shell\ucrt64\command]
@="D:\\soft\\msys64\\msys2_shell.cmd -here -no-start -ucrt64"

配置 git 路径

直接在 Settings.json 里加入 git.exe 的路径,会报错:
在这里插入图片描述
修改方法是在 git.exe 所在的 D:/soft/msys64/usr/bin/ 目录, 创建 git-wrap.bat 文件,然后 settings.json 用这个wrapper:
Windows shell环境: 从git bash切换到msys2_第13张图片

7. 安装 C/C++ 依赖库

以 bison 和 flex 为例

pacman -S bison flex

Windows shell环境: 从git bash切换到msys2_第14张图片
Windows shell环境: 从git bash切换到msys2_第15张图片
Windows shell环境: 从git bash切换到msys2_第16张图片
Windows shell环境: 从git bash切换到msys2_第17张图片

安装 ag

注意要安装带 ucrt 的,这样才能在 MSYS2 UCRT 里用

pacman -S mingw-w64-ucrt-x86_64-ag

如下的,无法使用:

pacman -S the_silver_searcher

查询 bison 和 flex 的安装目录

pacman -Ql bison | ag 'lib'

Windows shell环境: 从git bash切换到msys2_第18张图片

8. References

  • https://www.cnblogs.com/52fhy/p/15158765.html
  • https://www.msys2.org/docs/

你可能感兴趣的:(git,windows,bash,msys2,ucrt)