0%

Msys2

msys2是什么

  • Cygwin是运行于Windows平台的POSIX“子系统”,提供Windows下的类Unix环境,并提供将部分 Linux 应用“移植”到Windows平台的开发环境的一套软件。按照我经常开玩笑的话来讲,Cygwin 基本上就是传说中的 GNU/NT 系统(对照 GNU/Linux,GNU/BSD,GNU/HURD)。

  • MinGW,Minimalist GNU for Windows,用于开发原生(32位) Windows 应用的开发环境。它主要提供了针对 win32 应用的 GCC、GNU binutils 等工具,以及对等于 Windows SDK(的子集)的头文件和用于 MinGW 版本 linker 的库文件(so、a等,而不是 VC 的 lib)

  • MSYS2 (Minimal SYStem 2) 是一个MSYS的独立改写版本,主要用于 shell 命令行开发环境。同时它也是一个在Cygwin (POSIX 兼容性层) 和 MinGW-w64(从"MinGW-生成")基础上产生的,追求更好的互操作性的 Windows 软件;

    MSYS2 是MSYS的一个升级版,是集成了pacman和Mingw-w64的Cygwin升级版, 提供了bash shell等linux环境、版本控制软件(git/hg)和MinGW-w64 工具链。与MSYS最大的区别是移植了 Arch Linux的软件包管理系统 Pacman(其实是与Cygwin的区别)。就是说MSYS2是Cygwin的升级版本

    它的一个优点就在于利用pacman包管理器,msys2可以使用pacman来安装软件包,我们可以比较轻松的使用Linux包管理器的方式来安装一整套可以在Windows上运行的Linux工具。显而易见,你可以在Msys shell执行Linux相关命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//万能命令
Trluper@DESKTOP-67ADUGH UCRT64 ~
$ pacman -S --help
usage: pacman {-S --sync} [options] [package(s)]
options:
-b, --dbpath <path> set an alternate database location
-c, --clean remove old packages from cache directory (-cc for all)
-d, --nodeps skip dependency version checks (-dd to skip all checks)
-g, --groups view all members of a package group
(-gg to view all groups and members)
-i, --info view package information (-ii for extended information)
-l, --list <repo> view a list of packages in a repo
-p, --print print the targets instead of performing the operation
-q, --quiet show less information for query and search
-r, --root <path> set an alternate installation root
-s, --search <regex> search remote repositories for matching strings
-u, --sysupgrade upgrade installed packages (-uu enables downgrades)
-v, --verbose be verbose
-w, --downloadonly download packages but do not install/upgrade anything
-y, --refresh download fresh package databases from the server
(-yy to force a refresh even if up to date)

重点:任何 Linux 的软件都可以用 --help 找到一些关键的使用资料,而且大多数的 --help 是支持子文档查询,例如上面加了 -S, 只看这个 -S 的相关文档

命令

安装完成后,有对应的各个Msys *应用程序,这是指定相应的的shell,比如你运行Msys mingw64版本是安装gcc++,那么它们会被安装在msys\mingw64,刚开始只要目录,下载就有文件了:

  • 1,mingw32,MinGW 的32位环境的软件
  • 2,mingw64,MinGW的64位环境的软件
  • 3,ucrt64,微软的通用运行时环境,u 代表 universe(通用)。
  • 4,clang32,clang 32位环境,clang 是一个编译器。
  • 5,clang64,clang 64位环境
  • 6,clangarm64,arm架构的CPU 的 clang 环境。
  • 7,msys

你可以把上面的 7个 东西都理解成一个 子系统。mingw32 跟 mingw64 是比较常用的子系统。

其中Msys2 MSYS版本我们不做任何安装操作,一般只为同步更新软件库使用 #### 同步更新软件库 使用pacman -Syu同步更新软件库

1
pacman -Sys

搜索想要的软件包

pacman -Ss *查询云端仓库是否有某个软件,他会返回一些了该软件不同版本列表,*可为正则表达式字符串,指一个软件包名称。

1
2
3
4
pacman -Ss *

pacman -Ss gcc
pacman -Ss gdb

查看云端软件的具体信息

1
2
3
4
pacman -Si mingw-w64-x86_64-*

Trluper@DESKTOP-67ADUGH MINGW64 ~
$ pacman -Si mingw-w64-x86_64-gcc

查询一个软件是否安装

1
pacman -Qs mingw-w64-x86_64-*

查询本地已安装软件的具体信息

1
pacman -Qi mingw-w64-x86_64-*

查询本地已安装软件包所包含文件的列表

1
pacman -Ql mingw-w64-x86_64-*

删除一个软件

1
pacman -R mingw-w64-x86_64-*

安装gcc

1
2
//安装64位
pacman -S mingw-w64-x86_64-gcc

安装gdb

1
pacman -S mingw-w64-x86_64-gdb

packman 安装一个软件的过程就是下载 已经编译好的 静态库,动态库或者 exe,跟一些配置相关的文件,放在指定的位置。

查缺失的文件

pacman 还有一个 命令比较常用,就是支持查找当前软件包缺失的文件。比如不小心删除了SDL 的 SDL2.dll 文件,怎么知道哪个文件不见了,可以用以下命令。

1
pacman -Qk mingw-w64-x86_64-SDL2

pacman 通常会自动帮我们处理软件的依赖,但如果想看一下 软件的依赖,可以使用以下命令。

1
pactree mingw-w64-x86_64-SDL2

文章来源: msys2包管理介绍 初步使用msys2