使用MSYS的一些经验

最近由于某些需要,重新用上了 MSYS 和 MinGW 。但是和之前一样,一开始也是一头雾水。虽然高一就接触过 MinGW ,但是这几年的发展实在和当初完全不一样了,所以和第一次接触 MinGW 没两样。

MSYS 的安装已经非常简单了,可以从镜像源中直接下载安装,可参考

MSYS 使用 pacman 作为包管理器,安装时可以指定 msys 仓库下的包、mingw64 仓库下的包或者 mingw32 仓库下的包。

下文中将“从 msys 仓库下的包”简称 MSYS 的包,如 MSYS 的 make 。mingw64 仓库和 mingw32 仓库以此类推。

下文中所有 "/" 开头的路径,指在 Windows 上 MSYS 的安装路径,同时也是在 MSYS 中的系统根路径。

如无特殊说明,下文中的 MinGW 指 MinGW64

MSYS 和 MinGW64 的区别和联系?

网上关于MSYS和MinGW介绍也比较多,区别和联系也不少。打个形象但不恰当的比方:

  • MSYS 相当于操作系统(如Windows),这个操作系统提供的软件、接口等和Linux相似
  • MinGW 相当于开发工具包(如MSVC),这个开发工具包可以运行在 MSYS 下,包里的工具也可以运行在Windows下,编译结果是Windows程序

但是,MSYS也可以安装gcc,make等工具(我们称之为MSYS编译器),这些工具安装在 /usr/bin 路径下,MinGW 的工具安装在 /mingw/bin 下。这两套工具都可以编译程序。所以初次使用时经常会出现这样的疑问:究竟运行 msys2.exe 还是 mingw64.exe 来启动控制台?

这个问题在知乎中也有了答案

总的来说,就是:纯原生 Windows 应用,就用 MinGW 。

如何安装和使用 CMake 工具?

CMake 也是一个非常重要的 C++ 开发的工具,但是往往不在 MinGW 的 Toolchain 中。这时候就同样面临了安装MSYS的CMake 还是 MinGW 的 CMake 的问题。

就如同MSYS和MinGW中的gcc、make是不同的,二者装的CMake似乎也是不太相同的:

  • MSYS中安装的CMake默认配置 Makefile 项目,会生成一个 Makefile 文件。
  • MinGW中安装的CMake默认配置 MSVC 项目,会生成一个 VS 的 sln 文件(没错,生成 VS 工程)。如果要用 MinGW ,需要 cmake -G "MinGW Makefiles" 以生成供 mingw32-make 编译的 makefile 文件

但是二者生成的 makefile 文件中,调用的编译器的路径不同。MSYS 的 CMake 调用 /usr/bin 中的工具,而 MinGW 调用 /mingw64/bin 中的工具。所以,如果在 MinGW 中使用 /usr/bin/cmake 配置工程,那么配置完了也是无法编译的。

如何在 Windows 上直接调用 MinGW ?

很简单,在环境变量 PATH 中加入 /mingw64/bin 就可以直接使用 gcc 等工具了。但是,如果使用的是绝对路径(如 D:msys2mingw64bingcc.exe )则编译没有结果,应该是失败了。

这样其实在 Windows 上可以不用单独安装 CMake ,直接在 MinGW64 中安装一个就可以了。

如何在 VSCode 中使用 CMake 构建项目?

VSCode 的 CMake 和 CMake Tools 插件集成了 CMake 支持,这个工具可以直接生成 VS 项目并调用 MSVC 编译器编译工程,还能执行测试等,非常方便。

如果使用 MinGW 构建 CMake 项目,先让插件扫描一下工具包,配置好环境变量的情况下,应该会搜到 MinGW 中的 gcc 和 g++ 。选择这个工具包,CMake 就会自动配置 MinGW Makefile 文件。

但是如果要使用 MinGW 构建 CMake 的项目,有一个限制:CMake 配置文件中不能有测试。这是因为 MinGW 测试用的是 /bin/sh 显然这个在 Windows 上一般是找不到的,除非在当前项目所在盘符的根路径下创建 /bin 文件夹并安装 sh.exe 。这个位置能否修改,暂时还不清楚。


本人对 MinGW 的理解还比较浅薄,如哪里有误,还望广大网友批评指正。

发表回复

相关推荐

精心整理!分享25个适合三维爱好者的模型网站与数百款场景模型

作为三维爱好者,不管是商业作品还是个人作品,我们经常需要制作各种模型与场景。

· 2分钟前

maximo 創建一個模塊的步驟

首先需要配置數據庫,以下是我做的一個簡單的測試創建一個 CLASS 班級對象(需要註意的地方,是這個用來做為主對象需要勾選中...

· 5分钟前

高质量文案短句 50条励志文案短句,总有一条可以打动你

高质量文案短句  1.人间于此,欢喜是你。 2.看清这个世界,然后爱它。 3.海底月是天上月,皆不可得。 4.囿于银河,又困 ...

· 10分钟前

2023营销科学新能力指南

行业报告已收录100000+报告,覆蓋全行业研究报告,51全行业报告圈,目前拥有百万全行业报告库,300+细分垂直行业报告,每年 ...

· 10分钟前

“随便玩”是最大的骗局

01 小时候听到大人说,随便孩子玩,不管他。 每当此时都会很羡慕,别人家的爸爸妈妈怎么那么好,别人家的爸爸妈妈怎么那么 ...

· 11分钟前