msys2安装与配置: 在windows上使用linux工具链g++和包管理工具pacman C++开发-程序员宅基地

技术标签: c++  linux  windows  

为什么用这个msys2

  • 方便windows上的C++开发demo,不需要VS了
  • 方便C++开发安装opencv等三方库
  • 有了这个就不需要另外安装git, cmake, mingw64了,都可以通过pacman包管理工具一键安装

下载、doc

官网 https://www.msys2.org/
官方文档 https://www.msys2.org/docs/terminals/
github https://github.com/msys2/msys2-installer/releases/

  • 根据github readme中的说明,也许自解压包是个更好的选择(更加干净)
    在这里插入图片描述

这个msys2更新还挺活跃的,最新是2023.5.26版本, 软件本体只有84M,nice

安装,很简单

双击安装。安装过程基本上就是在解压,安装过程信息如下:到最后Updating trust database…的时候可能会卡住,此时进度50%,等着,或者尝试翻墙

正在准备安装…

正在准备解压组件......

正在解压组件......
正在提取“20230526msys64.7z”
已完成

正在安装组件 MSYS2
Copying skeleton files.
These files are for the users to personalise their msys2 experience.

They will never be overwritten nor automatically updated.


'./.bashrc' -> '/home/username2/.bashrc'
'./.bash_logout' -> '/home/username2/.bash_logout'
'./.bash_profile' -> '/home/username2/.bash_profile'

'./.profile' -> '/home/username2/.profile'

'C:\windows\system32\drivers\etc\hosts' -> '/etc/hosts'

'C:\windows\system32\drivers\etc\protocol' -> '/etc/protocols'

'C:\windows\system32\drivers\etc\services' -> '/etc/services'

'C:\windows\system32\drivers\etc\networks' -> '/etc/networks'

==> Generating pacman master key. This may take some time.

==> Updating trust database...

==> Appending keys from msys2.gpg...

==> Locally signing trusted keys in keyring...

  -> Locally signed 5 keys.
==> Importing owner trust values...
==> Disabling revoked keys in keyring...

  -> Disabled 4 keys.
==> Updating trust database...

[H[2J[3J
已完成
编写维护工具。

安装已完成!

初次运行,做些配置

安装之后有好几个终端环境,推荐使用的、默认打开的是ucrt64.exe,我这里也用这个,任务栏是这样的:
在这里插入图片描述

配置如下(这里刚开始,用Notepad++等编辑器编辑就行):

  • 修改home目录为C:/Users/username这个win目录
    • 配置文件 /etc/nsswitch.conf
    • 修改:db_home: windows cygwin desc
    • 修改后最好把安装位置/home/user/下的配置文件拷贝到win home下,比如.bashrc啥的
    • 修改后重新打开终端生效,可pwd查看路径
  • 修改~/.bashrc
    • 使能够记录历史命令
      • 我发现按向上方向键不显示之前输入过的历史命令
      • 向~/.bashrc中添加一行:export PROMPT_COMMAND='history -a'
      • 相同的命令仅记录一次:export HISTCONTROL=ignoredups
    • 使编译的C++程序运行打印中文时不会乱码:
      • 向~/.bashrc中添加一行: chcp.com 65001
  • 更换为国内源
    • 配置文件 /etc/pacman.d/下的
    • 修改:
      • db_home: windows cygwin desc各个mirrorlist文件,没必要都修改,修改你需要用的环境即可。比如我用ucrt64则只需修改: mirrorlist.msys, mirrorlist.ucrt64
      • 如何修改:把下面的国内源挪到上面,修改后应该是直接生效的
        在这里插入图片描述
  • 关闭不需要的软件源搜索结果:
    • 配置文件 /etc/pacman.conf

    • 修改:翻到最下面,把不需要的环境注释掉:

      # [clangarm64]
      # Include = /etc/pacman.d/mirrorlist.mingw
      # 
      # [mingw32]
      # Include = /etc/pacman.d/mirrorlist.mingw
      # 
      # [mingw64]
      # Include = /etc/pacman.d/mirrorlist.mingw
      
      [ucrt64]
      Include = /etc/pacman.d/mirrorlist.mingw
      
      # [clang32]
      # Include = /etc/pacman.d/mirrorlist.mingw
      # 
      # [clang64]
      # Include = /etc/pacman.d/mirrorlist.mingw
      
      [msys]
      Include = /etc/pacman.d/mirrorlist.msys
      
      

更新

pacman -Syyu,因为已经换源了,速度会挺快
会自动刚更新msys软件本体,和安装过的软件包。如果不想更新某个软件包,可以在配置文件设置。

  • 包管理工具是pacman, 也就是arch linux和manjaro linux的包管理工具,所以有问题搜索的时候可以参考这两个发行版的解决方案

软件安装与卸载方法

  • 一般的安装命令:pacman -S 软件包名 进行安装
  • 卸载命令:pacman -Rs 软件包名
  • 如何知道完整包名:pacman -Ss 包名关键词,比如vim
    • pacman -Ss vim 下图就搜索到了两个,前面粉红色的是环境tag,优先安装ucrt64的(尤其是g++,cmake啥的编译工具链最好用ucrt64),但我不想用neovim就选下面的msys那个vim了,红线就是完整包名,安装即可pacman -S vim 在这里插入图片描述

安装必要的软件包

  • 安装编译工具链:pacman -S mingw-w64-ucrt-x86_64-toolchain

    • 这里面包含很多东西,gcc, g++, make等都有了
    • 关于make命令,官方文档有比较:make vs mingw32-make. 我这里直接链接mingw32-make.exe为make.exe
      • cd /ucrt64/bin
      • ln -s mingw32-make.exe make.exe
      • 我的mingw32-make.exe隶属于mingw-w64-ucrt-x86_64-make软件包,应该就是官方推荐的
        • 可通过pacman -Qo mingw32-make.exe查看
  • 安装cmake: pacman -S mingw-w64-ucrt-x86_64-cmake

  • 安装git: pacman -S git

    • Git文档:8.1 自定义 Git - 配置 Git
    • 如果你要在vscode中使用Source Control:VSCode msys2/git Source control无法识别git仓库:the folder currently open doesn‘t have a git rep
    • 如果你使用这个git之后检查原有git仓库的status发现中文文件名的文件出错,可修改export LANG="en_US.UTF-8"
    • 防止中文路径被转义:git config --global core.quotepath false
    • git diff时忽略行尾的^M回车符:
      # 忽略行尾的回车
      git config --global core.whitespace cr-at-eol  
      
      # (这两个在msys2/git环境中应该不用执行)
      # 提交时自动转换为换行,检出时保留对应系统的设置
      git config --global core.autocrlf true   # win上设置
      git config --global core.autocrlf input  # unix上设置
      
  • 安装其他需要的软件

设置win环境变量

  • 上面安装的东西,可执行文件一般在/ucrt64/bin/usr/bin/下,把这两个加到系统PATH即可(注意顺序),这样你在非msys2终端环境中也能使用这里安装的软件了,比如rm, vim啥的
  • 在msys2的终端环境中默认无法使用win环境变量的PATH, 有两种方式可以使用:
    • 方法1:在win环境变量中添加一个新变量MSYS2_PATH_TYPE,值为inherit
    • 方法2:通过安装位置的msys2_shell.cmd启动,并添加-full-path参数

在windows terminal中使用

官方doc https://www.msys2.org/docs/terminals/

修改windows terminal的配置json, 注意修改路径为你的安装位置

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

在vscode中使用

官方文档 https://www.msys2.org/docs/ides-editors/

如下内容添加到vscode的settings.json, 注意修改路径为你的安装位置

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44220976/article/details/131761440

智能推荐

IPv6地址_ipv6保留地址-程序员宅基地

文章浏览阅读1.6k次。IPv6,Internet Protocol version 6(网际协议第六版),IPv4的升版本。和IPv4类似,IPv6是一种逻辑编址方案,用于网络层主机到主机的通信。_ipv6保留地址

HTTP请求头的具体含意-程序员宅基地

文章浏览阅读252次。Request headersAccept:  text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8  浏览器支持的 MIME 类型分别是 text/html、application/xhtml+xml、application/xml 和 */*,优先顺序是它..._text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,

解决LineChart 标签被屏幕遮盖问题_mpandroidchart 被遮挡-程序员宅基地

文章浏览阅读3.1k次。最近项目中有一个趋势展示功能,就用到了MPAndroidchart中了Linechart(折线图来实现)绘制好图后,发现x轴最后一个标签被屏幕遮挡一点(有一部分跑出屏幕外边)经查找问题后发现,原来是y轴右边设置不显示后,图会自动向屏幕右边扩展。虽然x轴有个一个函数 xAxis.setAvoidFirstLastClipping(false);//图表将避免第一个和最后一个标签条目被减掉_mpandroidchart 被遮挡

数据结构——图论基础篇_图论中有同权-程序员宅基地

文章浏览阅读525次。基本概念:图论〔Graph Theory〕是数学的一个分支。它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有这种关系。图论是一种表示 "多对多" 的关系图是由顶点和边组成的:(可以无边,但至少包含一个顶点)一组顶点:通常用 V(vertex) 表示顶点集合..._图论中有同权

Vue中 Vue.extend() 详解及使用-程序员宅基地

文章浏览阅读3w次,点赞13次,收藏45次。Vue中 Vue.extend() 详解及使用_vue.extend

解决springboot,单元测试启动ApplicationRunner问题_applicationrunner解决-程序员宅基地

文章浏览阅读1.6k次。在执行单元测试时,ApplicationRunner被意外启动,导致了Netty服务器被初始化,单元测试无法执行的问题。解决方案:通过设置ApplicationRunner对应Bean的Profile解决对应组件添加注解:@Profile("!test")单元测试添加注解:@ActiveProfiles("test")..._applicationrunner解决

随便推点

node vue 实时推送_如何使用Node,Vue和ElasticSearch构建实时搜索引擎-程序员宅基地

文章浏览阅读337次。node vue 实时推送 介绍 (Introduction)Elasticsearch is a distributed, RESTful search and analytics engine capable of solving a growing number of use cases. Elasticsearch is built on top of Apache Lucene, wh..._vue elasticsearch

CCS中的IER和IFR寄存器:Symbol ‘IER‘ could not be resolved_symbol 'ier' could not be resolved-程序员宅基地

文章浏览阅读9.1k次,点赞16次,收藏53次。问题现象main函数初始化时,关闭CPU的中断使能,清除不断标志,一般都是这么写的: IER = 0x0000; IFR = 0x0000;但是,CCS却提示:Symbol 'IER' could not be resolved可是呢,编译整个工程时,也不会报错。<Linking>Finished building target: "DCDC.out""D:/ti/ccs1040/ccs/utils/tiobj2bin/tiobj..._symbol 'ier' could not be resolved

Apk 分析与Hook技术_hook apk-程序员宅基地

文章浏览阅读4.4k次。Android技术防范与揭秘总结APK静态分析静态分析指,在不允许代码的情况下,通过词法分析,语法分析,控制流,数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性,安全性可靠性,可维护行等指标的一种代码分析技术。常用的分析利器查看源码工具dex2jar jd-gui dex2jar 将apk中的class.dex 转化为jar文件,而jd-gui是一个反编译工具,可以直接查看jar包中的源_hook apk

DM368开发 -- 文件烧写_dm368 不能下载 yaffs 程序-程序员宅基地

文章浏览阅读5.6k次,点赞2次,收藏5次。参看:DM36x的UBL分析以及串口启动UBL 是 RBL 引导启动的一段小程序,主要负责初始化时钟,串口,NAND,DDR2 等,然后把 uboot, kernel, rootfs 复制到 DDR2 上并引导 uboot。为什么 UBL 跟串口启动一起讲,那是因为这两个关系很密切,很多代码是共用的,而且代码都放在同一个目录下,所以就合起来一起讲了。一、UBLubl 的代码放在 dvsdk 目录下_dm368 不能下载 yaffs 程序

什么是分库分表?为什么需要分表?什么时候分库分表-程序员宅基地

文章浏览阅读1.4k次,点赞4次,收藏14次。分库分表是在海量数据下,由于单库、表数据量过大,导致数据库性能持续下降的问题,演变出的技术方案。分库分表是由分库和分表这两个独立概念组成的,只不过通常分库与分表的操作会同时进行,以至于我们习惯性的将它们合在一起叫做分库分表。通过一定的规则,将原本数据量大的数据库拆分成多个单独的数据库,将原本数据量大的表拆分成若干个数据表,使得单一的库、表性能达到最优的效果(响应速度快),以此提升整体数据库性能。预定义算法是事先已经明确知道分库和分表的数量,可以直接将某类数据路由到指定库或表中,查询的时候亦是如此。_分库分表

多行业万能预约门店小程序源码系统 带完整的搭建教程以及安装代码包-程序员宅基地

文章浏览阅读472次。小编给大家分享一款多行业万能预约门店小程序源码系统。该系统不仅具备高度的可定制性,还提供了丰富的功能模块,能够轻松应对不同行业的预约需求。:该系统支持多行业预约需求,无论是美容美发、餐饮娱乐还是医疗健身等行业,都能找到适合的预约模板和功能模块。:该系统提供了完整的搭建教程和安装代码包,用户只需按照教程操作,即可轻松完成小程序的搭建和部署。:系统提供了丰富的数据分析和统计功能,可以帮助商家了解预约情况、客户分布等信息,为门店运营提供有力支持。同时,还支持预约提醒功能,确保客户能够按时到店,提高预约的准确率。