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

news/2024/11/28 23:50:15/

文章目录

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

在这里插入图片描述

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 环境基础上增加内容得到的。

在这里插入图片描述

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

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

在这里插入图片描述
关于GCC和LLVM/Clang

在这里插入图片描述
GCC 相关的测试比较充分,LLVM 的一大特点则是 ASan 支持(疑问:GCC 不带 ASan 吗?)。稳妥起见先用 GCC 的。

关于C RunTime library: MSVCRT vs UCRT

在这里插入图片描述

UCRT 比较新,可以当 MSVCRT 用。

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

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

更新所有包

pacman -Suy

在这里插入图片描述
包缓存目录

/var/cache/pacman/pkg 目录存放了缓存的包, 例如我的
在这里插入图片描述
可以定期手动删除包,减少硬盘占用。

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}},// ...]
}

在这里插入图片描述

5. 使用 zsh

pacman -S zsh

在这里插入图片描述
继续修改 Windows 终端中的 json 文件,加入参数 -shell zsh

在这里插入图片描述
安装git

pacman -S git

在这里插入图片描述
安装git后,可以安装 oh-my-zsh

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

在这里插入图片描述

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"]}}

配置 git 路径

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

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

以 bison 和 flex 为例

pacman -S bison flex

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

安装 ag

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

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

如下的,无法使用:

pacman -S the_silver_searcher

查询 bison 和 flex 的安装目录

pacman -Ql bison | ag 'lib'

在这里插入图片描述

8. References

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

http://www.ppmy.cn/news/68925.html

相关文章

嵌入式通信协议【Modbus】Modbus功能码的详细描述

一、读功能码 1、 01 (0x01)读线圈 在一个远程设备中,使用该功能码读取线圈的 1 至 2000 连续状态。请求 PDU 详细说明了起始地址,即指定的第一个线圈地址和线圈编号。从零开始寻址线圈。因此寻址线圈 1-16 为 0-15。 根据数据域的每个比特将响应报文…

探寻生机 | 数说故事助力微播易第七届风向大会,研判新风向,洞察新趋势

“过去一年,有的人用ChatGPT谁出具的北京烤鸭图片最准确搞怪,有的人却已经利用虚拟主播单场带货百万;有的人正在被AIGC淘汰,有的人却通过人机协作实现20秒制作100张创意图;有的百万粉丝接不到广告,有的仅靠…

python使用Tushare库进行股票数据分析

Tushare是一个开源的Python财经数据接口库,可以获取股票、基金、期货等金融数据。本文将介绍如何使用Tushare库进行股票数据分析。 1. 安装Tushare库 在命令行中输入以下命令安装Tushare库: pip install tushare2. 获取股票数据 使用Tushare库获取股…

VMware Workstation 17 Pro安装配置CentOS 7与ssh工具链接配置

VMware Workstation 17 Pro安装配置CentOS 7与ssh工具链接配置 下载安装虚拟机VMware Workstation 17 Pro 虚拟机官网:点击直达 下载Cent os 7 镜像文件 123网盘地址:点击直达 提取码1213 在虚拟机中安装Cent os 7 第一步 点击 创建新的虚拟机 第二步 默…

【C++学习】C++11——新特性 | 右值引用 | 完美转发

🐱作者:一只大喵咪1201 🐱专栏:《C学习》 🔥格言:你只管努力,剩下的交给时间! C11——新特性 | 右值引用 | 完美转发 👀列表初始化🦴 std::initializer_list…

3. /dev/tty /dev/ttySn /dev/tty0区别

1. /dev/ttySn 串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。 计算机把每个串行端口都看作是一个字符设备。有段时间这些串行端口设备通常被称为终端设备,因为那时它的最大用途就是用来连接终端。这些串行端口所对应的设备名称是/dev/tt…

三、easyUI中的accordion(分类)组件

1.accordion(分类)组件的概述 分类空间允许用户使用多面板,但在同一时间只会显示一个。每个面板都内建支持展开和折叠功能。点击一个面板的标题将会展开或折叠面板主体。面板内容可以通过指定的href属性使用ajax方式读取面板内容。用户可以定…

实现端口复用的方法及应用场景

导言: 在网络编程中,端口复用是一种重要的技术,它可以实现在同一台主机上多个应用程序同时监听相同的端口。本文将介绍端口复用的概念、设置端口复用的方法以及端口复用的应用场景,并提供相应的代码实例。 什么是端口复用&#…