注意
MinGW 未作为 vcpkg 存储库的持续集成进程的一部分进行测试,因此当库更新时会发生回归。 欢迎 PR 改进支持!
Mingw-w64 社区三联密码
vcpkg 包含面向 Mingw-w64 的 x64、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/bin
、bin
)排除在 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.exe
、bash.exe
、msys-2.0.dll
或 cygwin1.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