三元组(Triplets)
三元组(Triplet)是交叉编译中的标准术语,用于将目标环境(CPU、操作系统、编译器、运行时等)浓缩为一个简洁的名称。
在 kmpkg 中,三元组为每个库描述了一组虚拟的“目标配置集”。同一三元组内的库通常采用相同的配置构建,但这并非强制要求。例如,针对同一目标操作系统和架构,你可以创建三个三元组:一个将 openssl 静态构建而 zlib 动态构建,一个将两者均静态构建,另一个将两者均动态构建。
一次构建最多会使用两个三元组的文件:目标三元组(target triplet)和宿主三元组(host triplet)。若需为不同库应用不同配置,必须创建包含该配置组合的自定义三元组。具体实现方法请参阅按端口自定义配置。
kmpkg 内置了适用于多种常见平台和配置的三元组。运行 kmpkg help triplet 可查看当前环境中可用的三元组列表。
三元组选择
选择目标三元组(Target Triplet)
- 经典模式:
- 在包引用中指定三元组名称,例如
zlib:x64-windows-static-md。 - 传递参数
--triplet=<triplet>。
- 在包引用中指定三元组名称,例如
- CMake:
- 设置变量
KMPKG_TARGET_TRIPLET。
- 设置变量
- MSBuild:
- 设置属性
KmpkgTriplet。
- 设置属性
选择当前机器的宿主三元组(Host Triplet)
- 经典模式:
- 传递参数
--host-triplet=<triplet>。
- 传递参数
- CMake:
- 设置变量
KMPKG_HOST_TRIPLET。
- 设置变量
- MSBuild:
- 设置属性
KmpkgHostTriplet。
- 设置属性
社区三元组(Community Triplets)
triplets\community 目录下的三元组未经过官方维护注册表的持续集成(CI)测试,但为社区常用需求。由于缺乏持续测试,端口更新可能会破坏与社区三元组的兼容性。我们欢迎并审核旨在解决这些三元组问题的贡献。
使用社区三元组时,包安装过程中会打印如下提示信息:
-- Using community triplet x86-uwp. This triplet configuration is not guaranteed to succeed.
-- [COMMUNITY] Loading triplet configuration from: D:\src\kmpkg\triplets\community\x86-uwp.cmake
添加或替换三元组
你可以通过替换内置三元组或创建新三元组来扩展 kmpkg,以适配特定项目需求。
步骤如下:
- 将
triplets\目录中的内置三元组文件复制到其他文件系统路径。 - 与 kmpkg 交互时,将该目录添加到覆盖三元组路径列表中。
配置方式如下:
- 清单模式:使用
$.kmpkg-configuration.overlay-triplets配置项。 - CMake 中使用 kmpkg:设置变量
KMPKG_OVERLAY_TRIPLETS。 - MSBuild 中使用 kmpkg:将
--overlay-triplets=...添加到 MSBuild 附加选项。 - 直接使用命令行:传递参数
--overlay-triplets=...。 - 环境变量:设置
$KMPKG_OVERLAY_TRIPLETS为覆盖路径列表。
如需详细操作指南,请参阅 覆盖三元组示例。
三元组名称仅可包含小写字母、数字和连字符。
注意事项
运行任何 kmpkg 命令时,默认三元组为 %KMPKG_DEFAULT_TRIPLET%;若该环境变量未定义,则使用平台特定的默认值:
- Windows:
x64-windows - Linux:
x64-linux - macOS:
x64-osx
创建新三元组时,建议采用系统化的命名方案。Android 工具链的命名方案可作为参考: https://developer.android.com/ndk/guides/standalone_toolchain.html。