工具链

MSYS2 介绍

MSYS2 是 MSYS 项目的延续,相比 MinGW 而言有着更活跃的开发和社区。我在搜索过程中发现 MSYS2 更受推荐。MSYS2 包含了多组独立的工具链:

  • MSYS2
  • MINGW32
  • MINGW64

MSYS2 安装后会出现三个快捷方式入口,MSYS2, MINGW32, MINGW64。这三个入口的区别在于,他们设置了 Shell 的环境变量 MSYSTEM 到不同的值。

这个变量决定了可执行文件的搜索顺序,也就是决定了使用的编译工具链。

举个例子,mingw32 工具链默认安装在 /mingw32 路径下。如果我们使用 MSYS2 入口,则输入 gcc 时不会搜索 mingw32 工具链,而是会搜索到 msys2-devel 软件组内的 gcc

如果我们使用 MINGW32 入口,则会优先搜索 /mingw32,从而使用全套的 mingw32 工具链。

软件包

MSYS2 使用的软件包管理器是 pacman

如果你搜索 gcc,也就是 pacman -Ss gcc,会发现有很多结果,如:

  • msys/gcc 9.3.0-1 (msys2-devel)
  • mingw64/mingw-w64-x86_64-gcc 10.2.0-1 (mingw-w64-x86_64-toolchain)

不同的前缀代表了不同的工具链。默认的 gcc 属于 msys2 工具链。而这里我想要编译使用 SDL2 的 64 位游戏, SDL2 提供的开发库是 mingw 的,因此我安装了 mingw-w64-x86_64-gcc

类似的,我还安装了 mingw-w64-x86_64-cmake

使用 CMake

这里假设了你已经懂得了一般的 CMake 编译过程。

这里需要注意,CMake 在 MSYS2 环境下的默认生成器 ( Default Generator ) 并不合适。我们需要人工指定。所以整个编译过程会像这样子:

mkdir build
cd build
cmake .. -G"MSYS Makefiles"
cmake --build .