Xbox 开发支持
Xbox 未纳入 kmpkg 仓库的持续集成(CI)测试流程,因此库更新过程中可能出现回归问题。
Xbox 社区三元组
kmpkg 内置了面向 Xbox 开发的社区三元组,需配合 带 Xbox 扩展的 Microsoft GDK 使用。这些三元组基于 MSVC 编译器工具集(Visual Studio 2019 16.11 及更高版本)构建。
每种三元组均提供静态链接和动态链接两个变体:
| 游戏主机 | kmpkg 社区三元组 |
|---|---|
| Xbox One | x64-xbox-xboxone |
| x64-xbox-xboxone-static | |
| Xbox Series X|S | x64-xbox-scarlett |
| x64-xbox-scarlett-static |
带 static 后缀的静态链接三元组配置为将 MSVC 运行时库作为 DLL 使用(即 KMPKG_CRT_LINKAGE dynamic)——这是官方推荐且受支持的使用方式。
若基于 Microsoft GDK 开发面向 Windows 桌面和手持设备的项目,可使用现有
x64-windows、x64-windows-static-md、arm64-windows和arm64-windows-static-md三元组,并配合 ms-gdk 端口。
基于 Windows SDK 构建
Windows SDK 22000 及更高版本包含构建 Xbox Game OS 所需的 WINAPI_FAMILY_GAMES API 分区系统头文件。因此,无需访问受保密协议(NDA)保护的带 Xbox 扩展的 Microsoft GDK,即可基于这些三元组构建大多数库。
基于带 Xbox 扩展的 Microsoft GDK 构建
使用 DirectX 图形 API 的库,必须基于 Xbox Game OS 专用的 Direct3D 12.X 变体构建,这需要访问受保密协议(NDA)保护的带 Xbox 扩展的 Microsoft GDK。请注意,Xbox Game OS 不支持 Direct3D 11、Direct2D/DirectWrite、OpenGL、GDI 或任何旧版本的 Direct3D。
依赖这些头文件的库需使用 ms-gdkx “存根端口”声明依赖关系。该端口会读取以下环境变量指向的路径:
| Microsoft GDK 版本 | 环境变量 |
|---|---|
| 2025年10月及以后版本 | GameDKCoreLatest、GameDKXboxLatest |
| 2025年4月及更早版本 | GameDKLatest、GameGXDKLatest、GameGRDKLatest |
Xbox 游戏开发者需确保自身及发行商已根据《游戏授权协议》(Title License Agreement)的条款,获得使用任何第三方软件组件的适当且合规的授权。使用开源组件开发游戏时,务必咨询专业的法律意见。
Xbox 上的 UWP 开发
若为 Xbox 上的 UWP 平台构建项目,应改用现有 x64-uwp 三元组。
维护者注意事项
为这些三元组构建 CMake 项目时,CMAKE_SYSTEM_NAME 会设为 "Windows"。为标识目标 Xbox 主机,XBOX_CONSOLE_TARGET 变量会被设为 "xboxone" 或 "scarlett"。
Xbox 三元组编译时会添加 /DWINAPI_FAMILY=WINAPI_FAMILY_GAMES 宏定义,并根据目标主机选择 /arch:AVX 或 /arch:AVX2 架构选项。
此外,Xbox 三元组还会启用 /DUNICODE /D_UNICODE 编译选项——这是现代开发的强推荐配置。更多信息可参考 UTF-8 Everywhere 宣言。
对于动态库,需避免显式链接 KERNEL32.LIB 或 ONECORE.LIB。Xbox 平台使用专用的平台伞状库(umbrella library),与 kernel32 等库存在冲突。详情可参考 Microsoft Learn 文档。
扩展阅读
更多信息可参阅 这篇博客文章。
另可参考 GitHub 上的 CMakeExample 示例项目。