工具链
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 .