Mingw-w64

注意

MinGW 未作为 vcpkg 存储库的持续集成进程的一部分进行测试,因此当库更新时会发生回归。 欢迎 PR 改进支持!

Mingw-w64 社区三联密码

vcpkg 包含面向 Mingw-w64x64、x86、arm64 和 arm 社区三联密码。 它们不依赖于 Visual Studio,并且可在 Windows 本地使用,也可以在其他操作系统上进行跨编译。 每个三联密码可在静态和动态链接两种变体之间进行选择。 实际工具(g++ 等)应以特定前缀命名。

体系结构 vcpkg 社区三联密码 工具名称前缀
X64 x64-mingw-dynamic、x64-mingw-static x86_64-w64-mingw32-
x86 x86-mingw-dynamic、x86-mingw-static i686-w64-mingw32-
arm64 arm64-mingw-dynamic、arm64-mingw-static aarch64-w64-mingw32-
arm arm-mingw-dynamic、arm-mingw-static armv7-w64-mingw32-

持续集成不对上述三联密码进行测试,因此许多端口不构建,甚至现有端口可能在端口更新时中断。 社区参与因此就显得尤为重要!

在 Windows 上本机使用 Mingw-w64

可以使用 MSYS2 轻松创建完整环境,用于在 Windows PC 上使用 Mingw-w64 构建端口。

在本地 Windows 环境下构建软件时,必须使用 MSYS2 的 mingw subsystem,并为此子系统安装一些包含特定前缀的包。

体系结构 vcpkg 三联密码 子系统 包前缀
x64 x64-mingw-dynamic、x64-mingw-static mingw64 mingw-w64-x86_64-
x86 x86-mingw-dynamic、x86-mingw-static mingw32 mingw-w64-i686-

在 MSYS2 的基础安装后,需要安装其他一些软件开发包,例如 x64:

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

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

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

应通过运行 bootstrap-vcpkg.bat 来引导启动 vcpkg。 此命令将下载官方 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 的包所需的各种其他生成工具。 具体而言,当端口将工具目录追加到 PATH 环境变量时,这可能会更改实际调用具有特定名称的工具,以及改变工具之间传递参数的方式。

若要在进行完整 MSYS2 安装时缓解此类问题,请尝试将 msys 子系统的目录(/usr/binbin)排除在 vcpkg 找到的 PATH 环境变量以外。 在 bash 中,可以只修改 PATH vcpkg 的单个调用:

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

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

在 Azure Pipelines、Github Actions 或类似设备上将 vcpkg 用于 CI 时,默认值 PATH 可能包含更多目录,这些目录可以创建不同安装中的 MSYS2 程序的组合。 可能需要手动设置所需的 PATH 目录,或者删除包含 sh.exebash.exemsys-2.0.dllcygwin1.dll 的目录。

使用 Mingw-w64 在其他系统上构建 Windows 程序

可以将 vcpkg mingw 社区三联密码与非 Windows 计算机上的工具链配合使用,以便跨编译要在 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