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

news2024/11/26 16:22:45

文章目录

    • 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.coloradmin.cn/o/533859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ES6模块化规范

在没有ES6模块化规范前,有像AMD、CMD这样的浏览器模块化规范,还有像CommonJS这样的服务端模块化规范。 2015年,JS终于推出了官方的模块化规范,为了统一各种规范,我们简称ES6 模块化。 ES6目前作为JS的内置模块化系统&a…

Spring的创建和使用,存储和读取Bean总结

目录 Spring项目创建和使用流程 1.创建一个 Spring 项目 2.存储 Bean 3.读取 Bean ApplicationContext和BeanFactory的区别 通过注解存储 Bean对象 五大类注解的关系 Java程序标准分层 方法注解Bean 注入Bean对象的三种方式 1.属性注入 2.Setter注入 3.构造方法注入…

【Java数据结构】Map和Set

Map和Set 搜索树概念操作 - 查找操作 - 插入操作 - 删除cur没有左树(cur.left null)cur没有右树(cur.right null)cur既有左树也有右树(最困难的情况)替罪羊删除法 操作代码性能分析和 java 类集的关系 搜…

程序员困局:去大城市进大厂却买不了房,回老家又没有高薪工作…

对于在外打拼的程序员来说,难的是进大厂,而不是买不起房。 进大厂的程序员,能不能买得起房? 进大厂的程序员的薪资,还是相当可观的。以阿里P6为例,年薪50万,到手40万左右,刨去10万…

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

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

收藏!网络行业主流的六大技术认证全科普

大家好,我是老杨。你的年终总结做完了没?还没做完,点击“年终总结”,拿个模板,快速完成。 很多人在年末都会有列一个新年愿望清单,写写来年想要完成的事情。 不少网工在这两年的就业环境之下,…

Nginx-部署2个vue项目(多个项目)-二级域名设置代理

前言 最近在实际开发过程中,需要在服务器部署2个项目。需要nginx二级域名。 开始时候在网上查了一圈,各有说法,不是很全,很头大。这里把自己成功的二级域名代理记录一下。 网上有很多文章说要该router.js文件,要该vu…

自动备份交换机的配置到远程服务器

环境 交换机配置修改后及时备份相关配置,每次配置变化后需要在1分钟后自动进行保存,并且将配置上传至FTP服务器;每隔30分钟,交换机自动把配置上传到FTP服务器 配置命令: [huawei]set save-configuration delay 1 //…

单片机外围电路:电阻之上下拉电阻

1.基础概念 上拉就是将不确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用。下拉同理,也是将不确定的信号通过一个电阻钳位在低电平。 2.基础应用 上下拉电阻在数字电路中使用,为了好理解一点,可把上下拉电阻大致分为两种…

货币简史:从物物交换到数字货币

货币简史 1. 物物交换阶段2. 一般等价物阶段3. 信用货币阶段4. 电子货币阶段5. 数字货币阶段 金钱是什么时候产生的呢,这取决于你如何定义金钱。 费利克斯马丁(FelixMartin)名为《金钱:未授权的传记》(Money:An Unauthorized Biography)书中…

19c rac环境修改pubic, vip,scan ip步骤

19c rac环境第一次修改public、vip和scan ip,和11g还是稍有不同。首先说明下环境 具体步骤如下 1、修改public地址,关闭实例后使用root用户操作 [rootdb1 ~]# ./oifcfg getif bond0 172.20.30.0 global public bond2 100.100.100.0 global clust…

【JVM】JVM堆内存(heap)详解

文章目录 前言一、堆内存划分二、为什么移除永久代?三、分代概念四、为什么分代?五、为什么survivor分为两块相等大小的幸存空间?六、JVM堆内存常用参数七、垃圾回收算法(GC,Garbage Collection)八、垃圾收…

java 反射及代理模式初步学习

java 反射及代理模式初步学习 0. 什么是反射? Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法&#xf…

小程序组件

swiper swiper 和 swiper-item 结合使用,, swiper有默认高度 300rpx 属性: autoplay : 自动播放circular : 循环播放indicator-dots : 显示指示点indicator-active-color : 轮播选中的颜色 &…

SpringBoot整合钉钉消息推送(四十四)

从头开始,并不意味着失败,相反,正是拥抱成功的第一步,即使还会继续失败 上一章简单介绍了 SpringBoot 发送邮件(四十三), 如果没有看过,请观看上一章 钉钉消息推送, 官方文档: https://open.dingtalk.com/document/gr…

3.结构化的数学思想

前言 今天在复习概率论的公理化过程中,我发现它的公理其实也是人为定义的,为什么我会这么想呢?这是因为我曾听过严伯均在为什么诺贝尔奖没有数学讲曾说过数学是一门无法证伪的学科,甚至不能算是科学,而诺贝尔设置这个…

超详细的Linux环境下使用git上传代码教程(gitee版)

git是一个版本控制器,我们使用它上传我们以前写过的代码给他进行托管,更为方便以后找到,同时也方便我们找到我们每次更改了什么。 创建仓库 创建完成后界面: 接下来复制我们创建的仓库的地址: 使用 git 命令行 安装…

BGP路由策略,IPV6

下一跳不变 从EBGP来的路由,传给|BGP S居时,下一跳不变 解决方案: 水平分割 ∷:AS内防环 从|BGP来的路由,不会传给IBGP邻居 1全互联 2路由反射器 3联盟 BGP选路原则: 当BGP 由表存在多条相同路由,会产生多个转发路径,BGP 会根据这些路由的属性,选择一条最优…

使用 C 语言验证非均匀概率的离散事件在样本数量足够大时,符合正态分布曲线(通过生成一个PPM格式的图像)

我想写本文的原因是看到著名数学科普账号 3Blue1Brown 发布的【官方双语】但是什么是中心极限定理?中提到:不论这个离散型事件的各种情况概率是不是平均的,当数量一定大时,还是会符合正态分布曲线。我就想自己试试看是不是这种情况…

深入篇【C++】类与对象:const成员与Static成员

深入篇【C】类与对象&#xff1a;const成员与Static成员 ⏰<const成员>&#x1f553;1.权限&#x1f550;2.规则&#x1f552;3.思考&#xff1a; ⏰<Static成员>&#x1f551;1.概念&#x1f557;2.特性&#x1f555;3.思考&#xff1a; ⏰<const成员> &am…