基本安装 MSYS2 后,需要安装一些用于软件开发的其他包,例如,对于 x64:

pacman -S --needed git base-devel mingw-w64-x86_64-toolchain

通过运行 MSYS2 MinGW 应用来选择活动子系统,或者在正在运行的终端中更改

source shell mingw64   # for x64, or "mingw32" for x86

vcpkg 的引导应通过运行bootstrap-vcpkg.bat来完成。 此命令将下载官方vcpkg.exe。

git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.bat

若要生成包,需要告知 vcpkg 要使用 mingw 三元。 这可以通过不同的方式完成。 如果未安装 Visual Studio,还必须将主机三元组设置为 mingw。 这是解析主机依赖项所必需的。 为方便起见,可以使用环境变量来设置这两个三元组:

export VCPKG_DEFAULT_TRIPLET=x64-mingw-dynamic
export VCPKG_DEFAULT_HOST_TRIPLET=x64-mingw-dynamic

现在,可以测试设置:

./vcpkg install zlib

如何避免混合使用不同的安装

MSYS2 项目明确警告 ,“混合来自其他 MSYS2 安装、Cygwin 安装、编译器工具链甚至各种其他程序的程序不受支持,可能会以意想不到的方式破坏内容。例如,正确传递带有引号和转义的命令行参数可能会失败。

但 vcpkg 端口隐式创建 MSYS2 安装,例如,为 pkg-config 处理基于 autoconf 的包所需的各种其他生成工具创建 MSYS2 安装。 具体而言,当端口将工具目录追加到 PATH 环境变量前时,这可能会更改实际调用具有特定名称的工具,以及如何在工具之间传递参数。

若要在处理完整的 MSYS2 安装时缓解此类问题,请尝试将 msys 子系统的目录保留 (/usr/binbin) vcpkg 找到的 PATH 环境变量之外。 在 bash 中,可以仅针对 vcpkg 的单个调用修改 PATH

PATH="${PATH/:\/usr\/bin:\/bin:/:}" ./vcpkg install libpq

或者,可以在 添加所需的 mingw 目录 ((例如 C:\msys64\mingw64\bin ,) ) PATH后,从常规命令提示符运行 vcpkg。

在 Azure Pipelines、Github Actions 或类似设备上将 vcpkg for CI 与标准映像一起使用时,默认值 PATH 可能包含更多目录,这些目录会从不同的安装创建混合 MSYS2 程序。 可能需要手动设置所需的 PATH ,或删除包含 sh.exebash.exemsys-2.0.dllcygwin1.dll的目录。

使用 Mingw-w64 在其他系统上生成 Windows 程序

可以在非 Windows 计算机上将 vcpkg mingw 社区三胞胎与工具链配合使用,交叉编译要运行在 Windows 上的软件。 许多 Linux 发行版在带有 mingw-w64 后缀前缀的可选包中提供此类工具链。 例如,对于基于 Debian 的分发版,首先针对 x64 工具链使用此安装命令:

sudo apt-get install gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64

Linux 分发版上的 Mingw-w64 工具链的打包版本可能是较旧的版本,缺少一些有用的功能或 bug 修复。 MXE 提供替代的独立工具链。

对于 vcpkg 引导,请克隆 github 存储库并运行 bootstrap-vcpkg.sh 脚本:

git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg install zlib:x64-mingw-dynamic