MSYS2 的安装与使用

MSYS2 简介

简单的说,MSYS2 是 MSYS 的一个升级版, 提供了 GCC 工具链。与 MSYS 最大的区别是移植了 Arch Linux 的软件包管理系统 Pacman。有了 Pacman 升级系统,安装新软件包,还有解决软件包间的依赖问题就变得简单多了。从 官网 下载安装包并安装,安装包的文件名通常为 msys2-<架构>-<日期>.exe ,根据 CPU 架构选择最新的安装包。也可以从以下链接下载安装程序或基本 MSYS2 归档文件:
- 32 位
- 64 位

MSYS2 设计目标是在 MS Windows 上运行 MinGW 工具链的, 它有两套 MinGW 工具链,一个是 mingw32,一个是 mingw64。 它们的功能是一样的,都是用于编译 MS Windows 上的代码(能调用 MS Windows 应用程序接口,不能调用 Unix/Linux 系统调用)的,可以生成“纯净”的 win32 和 win64 可执行文件。这些可执行文件运行时只依赖 MS Windows 系统的动态库或静态库。另外,MSYS2 自身还带了一个原生 GCC 工具链,它可用于编译 UNIX/Linux 代码,但支持的函数仅限于 POSIX 部分,其他系统调用都不支持,如 Linux 的 epoll、eventfd 等等,所以功能有限。原生 GCC 工具链可编译生成 MS Windows 平台上的可执行文件,但它们的运行必须依赖 msys2xxx.dll。开发专业应用软件,不要使用 MSYS2 的原生 GCC 工具链,它只是为了编译 MinGW 工具链而存在的,是制造工具的工具。

可以看到 MSYS2 有三个执行脚本,分别是 msys2_shell.bat、mingw32_shell.bat 和 mingw64_shell.bat, 查看相应的文件内容可以看到其中的区别。实际上,三个 .bat 的区别就是对环境变量 PATH 的不同设置,mingw32_shell.bat 优先使用 msys64/mingw32 下的工具,mingw64_shell.bat 优先使用 msys64/mingw64 下的工具,而 msys2_shell.bat 两个都不使用,只用自身 msys 的工具(依赖 msys2xxx.dll)。这么做的好处是当需要编译 32 位的项目时使用 mingw32_shell.bat,64 位的项目使用 mingw64_shell.bat,各套工具互不干扰。

配置软件源

需要修改安装目录下,/etc/pacman.d 文件夹中的 mirrorlist.msys、mirrorlist.mingw64、mirrorlist.mingw32 三个文件,分别在文件开始处添加:

notepad /etc/pacman.d/mirrorlist.msys:

MSYS2 repository mirrorlist

Primary

msys2.org

清华大学

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch

中科大

Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch

原文件自带的源(国外)

Server = http://repo.msys2.org/msys/arch/Server=https://sourceforge.net/projects/msys2/files/REPOS/MSYS2/arch/ Server = https://sourceforge.net/projects/msys2/files/REPOS/MSYS2/arch/
Server = http://www2.futureware.at/~nickoe/msys2-mirror/msys/arch/Server=https://mirror.yandex.ru/mirrors/msys2/msys/arch/ Server = https://mirror.yandex.ru/mirrors/msys2/msys/arch/

notepad /etc/pacman.d/mirrorlist.mingw64:

64-bit Mingw-w64 repository mirrorlist

Primary

msys2.org

清华大学

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64

中科大

Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64

下边是原文件默认的源(国外)

Server = http://repo.msys2.org/mingw/x86_64/
Server = https://sourceforge.net/projects/msys2/files/REPOS/MINGW/x86_64/
Server = http://www2.futureware.at/~nickoe/msys2-mirror/mingw/x86_64/
Server = https://mirror.yandex.ru/mirrors/msys2/mingw/x86_64/

notepad /etc/pacman.d/mirrorlist.mingw32:

32-bit Mingw-w64 repository mirrorlist

Primary

msys2.org

清华大学

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686

中科大

Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686

下边是源文件自带的源(国外)

Server = http://repo.msys2.org/mingw/i686/
Server = https://sourceforge.net/projects/msys2/files/REPOS/MINGW/i686/
Server = http://www2.futureware.at/~nickoe/msys2-mirror/mingw/i686/
Server = https://mirror.yandex.ru/mirrors/msys2/mingw/i686/

提高数据库访问速度

Pacman 将所有软件包的信息放在一一对应的许多小文件中。通过改善数据库访问速度,可以减少花在数据库相关任务上的时间,比如:寻找软件包、检索软件包依赖性。最安全最简单的方法是以root身份运行
$ pacman-optimize

上述命令试图将所有小文件放在磁盘上同一个物理区域,以减少磁头移动。这种方法很安全,但不一定有效。其效果取决于你的文件系统、磁盘使用率、和磁盘碎片程度。另一种更激进的方式是在优化数据库之前首先删除 cache 中所有未安装以及不使用的仓库中的包:
$ pacman -Sc && pacman-optimize

如果你的包下载速度变得极慢,首先确定你用的是那些(镜像)网站而不是 MSYS2 的官方链接。其次,可以通过各种下载工具而不是 Pacman 内置的下载方式,来改善 Pacman 的下载速度。不论怎样,在做任何修改前,你必须确定拥有了最新版的Pacman:
$ pacman -Syu

对于需要更强大代理支持的用户来说,用 wget 比用 Pacman 自己的下载方式更加方便。要使用 wget,首先使用
$ pacman -S wget

安装它,然后修改 /etc/pacman.conf 并在其中的 [options] 区段将下面内容去掉注释:
$ nano -w /etc/pacman.conf
XferCommand = /usr/bin/wget -c --passive-ftp -c %u

除了将 wget 参数放在 /etc/pacman.conf 里,你也可以直接修改 wget 配置文件(全局文件是/etc/wgetrc,各个用户的文件是 HOME/.wgetrc)。如果对于支持断点续传的下载工具还不满足需求,那么可以使用支持多线程的断点下载工具。例如aria2是一个具有断点续传和分块下载功能的轻量级下载软件,支持HTTP/HTTPS/FTP协议。aria2可以以多线程的方式通过HTTP/HTTPSFTP协议连接镜像服务器,显著提高下载速度。先使用下述方式HOME/.wgetrc)。 如果对于支持断点续传的下载工具还不满足需求,那么可以使用支持多线程的断点下载工具。例如 aria2 是一个具有断点续传和分块下载功能的轻量级下载软件,支持 HTTP/HTTPS/FTP 协议。aria2 可以以多线程的方式通过 HTTP/HTTPS和FTP 协议连接镜像服务器,显著提高下载速度。先使用下述方式 ``` pacman -S aria2```

安装 aria2。接着修改 /etc/pacman.conf,在 [option] 段添加下列一行(如果已存在则修改之):
$ notepad /etc/pacman.conf
XferCommand = /usr/bin/aria2c --allow-overwrite=true -c --file-allocation=none --log-level=error -m2 --max-connection-per-server=2
--max-file-not-found=5 --min-split-size=5M --no-conf --remote-time=true --summary-interval=60 -t5 -d / -o %o %u

开启 pacman 的多线程下载之旅吧!

安装必要的工具链和必要的开发库

下面假设使用的是 64 位系统。如果使用的是 32 位系统,仅需后面出现的 x86_64 改为 i686。在 MS Windows 开始菜单中运行 mingw64_shell.bat 以打开命令行窗口。更新本地软件包数据库也即与软件仓库同步:
$ pacman -S --refresh

$ pacman -Sy

然后升级软件包也即更新系统:
$ pacman -S --sysupgrade

$ pacman -Su

通常,将上述命令合二为一
$ pacman -Syu

现在开始安装工具链
$ pacman -S mingw-w64-x86_64-toolchain

如果提示冲突,则使用
$ pacman -S --force mingw-w64-x86_64-toolchain

开发的各种辅助工具
$ pacman -S base-devel

安装 GTK±3 的库
$ pacman -S --force mingw-w64-x86_64-gtk3

安装 GTK+ 快速构建工具 Glade 包
$ pacman -S --force mingw-w64-x86_64-glade3

安装 wxWidgets 的库
$ pacman -S --force mingw-w64-x86_64-wxWidgets

安装 OpenGL 库(虽然微软操作系统自带了 OpenGL 库,为了与 MSYS2 相容,选用 GLEW、FreeGLUT 库)
$ pacman -S --force mingw-w64-x86_64-glew mingw-w64-x86_64-freeglut

pacman 的常用用法

查看 pacman 工具帮助
$ pacman -h
$ pacman -S -h

列出本地 pacman 软件包数据库中的软件包清单
$ Pacman -Sl

列出所有已安装的软件包
$ pacman -Q --explicit
或者
$ pacman -Q -e
或直接
$ pacman -Q

安装新的软件包或软件组
$ pacman -S <package_names|package_groups></package_names|package_groups>
比如我要安装 gcc,那么执行:
$ pacman -S gcc

很多时候,我们不知道要安装软件的准确名称,这时就要先查询软件包的名称。
$ pacman -Ss <name_pattern></name_pattern>
比如我想安装 gcc 相关的软件,那么可以这样搜索
$ pacman -Ss gcc

可以列出所有的软件组
$ pacman -Q --groups
或者
$ pacman -Q -g

查看软件组
$ pacman -S -g

查看软件组包含的软件
$ pacman -Q -g <package_groups></package_groups>
例如:
$ pacman -Q -g base-devel

查询软件包的内容
$ pacman -Q -l <package_names|package_groups></package_names|package_groups>
例如查询软件包 gtk+ 的内容:
$ pacman -Q -l gtk+

查询软件所在的软件包或软件组
$ pacman -Q -s <package_names></package_names>
例如:
$ pacman -Q -s nettle

强制安装某个包(不管是否已安装)
$ pacman -Sf nettle

更新系统但不升级某个包
$ pacman -Su --ignore mysql

删除一个软件包
$ pacman -R <package_names|package_groups></package_names|package_groups>
例如删掉某个包但忽略无用依赖的删除:
$ pacman -R glade3

删除指定软件包,及其所有没有被其他已安装软件包使用的依赖关系:
$ pacman -Rs mysql

清理当前未被安装软件包的缓存(/var/cache/pacman/pkg):
$ pacman -Sc

清理所有下载的包与数据库
$ pacman -Scc

下载包而不安装它
$ pacman -Sw mysql

Cmder 的安装与使用

简介

Cmder是一个软件包,它被创建出来替代极不满没有漂亮的控制台模拟器的Windows上,mder从字面意义上来讲解就是使用命令行的人,但是里面却蕴含了另外的一层含义:面对困难而不放弃。如图:

Cmder 官网地址

Cmder 优势

  1. 支持多标签
  2. 支持全屏显示
  3. 可以方便的对命令行窗口的属性进行设置,比如字体,编码,颜色,背景等,自定义化程度很高
  4. 可以方便的拷贝大量输出数据,比如调试日志
  5. 由于集成了conemu-maximus5和 git-for-windows,所以附带 ls,grep等linux常见的小工具
  6. 可以自己识别系统已经安装的各种命令行环境,比如msys2,vs的命令行环境,cygwin,win10的wsl等,如图
    {asset_img cmder-1.png Cmder }

Cmder 演示

Cmder 使用技巧

  1. cmder中的命令提示符是类似“人”这种,如何修改成""$”最新版本需要修改clink.lua 文件,找到下面的位器local lambda = “入”,把这个符号改成熟悉的美元符号或者其他你喜欢的符号即可;

  2. cmder有时候输入的首个字母无法回车删除,参照方法 1 的方式,把“入”改成“$”美元符号即可

  3. 整合 MSYS2
    如图添加 MSYS2 配置即可

  1. 将cmder添加到系统中的环境变量中,便可以直接通过指令启动cmder;

MSYS2 整合 Cmder

  1. 需要注意msys2和ming32是两套环境,上面的演示gif也说明了这个问题,所以一定要注意按需下载,类似gcc,g++这种都是两套的,但是configure程序只有msys2自带的那个,它自己会根据你打开的命令行环境来生成对应编译环境的Makefile,调用对应的gcc等程序

  2. 如果出现奇怪的编译错误,那么可以检查一下是不是现有的编译环境某些程序和msys2自身环境有冲突,因为其他编译环境一定程度上继承了msys2自身的环境。

  3. 如果编译的时候需要一些老的开发库,那么可以访问msys2的官方仓库网址,一般可以在这里找到老的开发库安装包,然后我们下载下来使用pacman本地安装即可

  4. 将msys2添加到系统中的环境变量中,这样cmd中可以使用msys2的指令

  1. 添加msys2_root的新环境变量

也可以在cmder命令行中输入下面代码:

set CHERE_INVOKING=1 & %MSYS2_ROOT%\usr\bin\bash.exe -c 'MSYSTEM=MINGW64 exec /bin/sh --login -i'
或者:
set CHERE_INVOKING=1 & %MSYS2_RO0T%\usr\bin\zsh.exe --login -i -new_console:C:"%MSYS2_ROOT%\msys2.ico"

参考