最近由于某些需要,重新用上了 MSYS 和 MinGW 。但是和之前一样,一开始也是一头雾水。虽然高一就接触过 MinGW ,但是这几年的发展实在和当初完全不一样了,所以和第一次接触 MinGW 没两样。
MSYS 的安装已经非常简单了,可以从镜像源中直接下载安装,可参考
MSYS 使用 pacman 作为包管理器,安装时可以指定 msys 仓库下的包、mingw64 仓库下的包或者 mingw32 仓库下的包。
下文中将“从 msys 仓库下的包”简称 MSYS 的包,如 MSYS 的 make 。mingw64 仓库和 mingw32 仓库以此类推。
下文中所有 "/" 开头的路径,指在 Windows 上 MSYS 的安装路径,同时也是在 MSYS 中的系统根路径。
如无特殊说明,下文中的 MinGW 指 MinGW64
网上关于MSYS和MinGW介绍也比较多,区别和联系也不少。打个形象但不恰当的比方:
但是,MSYS也可以安装gcc,make等工具(我们称之为MSYS编译器),这些工具安装在 /usr/bin 路径下,MinGW 的工具安装在 /mingw/bin 下。这两套工具都可以编译程序。所以初次使用时经常会出现这样的疑问:究竟运行 msys2.exe 还是 mingw64.exe 来启动控制台?
这个问题在知乎中也有了答案
总的来说,就是:纯原生 Windows 应用,就用 MinGW 。
CMake 也是一个非常重要的 C++ 开发的工具,但是往往不在 MinGW 的 Toolchain 中。这时候就同样面临了安装MSYS的CMake 还是 MinGW 的 CMake 的问题。
就如同MSYS和MinGW中的gcc、make是不同的,二者装的CMake似乎也是不太相同的:
但是二者生成的 makefile 文件中,调用的编译器的路径不同。MSYS 的 CMake 调用 /usr/bin 中的工具,而 MinGW 调用 /mingw64/bin 中的工具。所以,如果在 MinGW 中使用 /usr/bin/cmake 配置工程,那么配置完了也是无法编译的。
很简单,在环境变量 PATH 中加入 /mingw64/bin 就可以直接使用 gcc 等工具了。但是,如果使用的是绝对路径(如 D:msys2mingw64bingcc.exe )则编译没有结果,应该是失败了。
这样其实在 Windows 上可以不用单独安装 CMake ,直接在 MinGW64 中安装一个就可以了。
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 的理解还比较浅薄,如哪里有误,还望广大网友批评指正。