Skip to main content
Puede desarrollar títulos con el Microsoft Game Development Kit (GDK) mediante Clang/LLVM con Visual Studio 2019, Visual Studio 2022 o Visual Studio 2026 y el conjunto de herramientas clang/LLVM para Windows v12 o posterior. Este conjunto de herramientas usa el Visual C/C++ Runtime (la biblioteca Universal CRT + la STL de Microsoft). Otras combinaciones de conjuntos de herramientas y runtime podrían no ejecutarse correctamente ni superar la certificación de títulos. Clang/LLVM para Windows con el conjunto de herramientas de plataforma LLVM (clang-cl) (es decir, ClangCL) usa la biblioteca estándar de C++ de Microsoft.

Versiones y componentes de Visual Studio necesarios

Necesita Visual Studio versión 16.11 o posterior para usar Clang/LLVM con el GDK. Seleccione el componente C++ Clang Compiler for Windows en Individual Components al instalar Visual Studio. Según la versión de Visual Studio que use, los componentes de Clang/LLVM necesarios pueden llamarse C++ Clang Compiler for Windows y C++ Clang-cl for v142 build tools (x64/x86).
Si modifica su instalación existente de Visual Studio para agregar el C++ Clang Compiler for Windows después de instalar el GDK, debe reparar la instalación del GDK antes de usar Clang/LLVM.
Si instala el componente C++ Clang Compiler for Windows, el programa de instalación del GDK instala la compatibilidad con el conjunto de herramientas de plataforma ClangCl para las plataformas Gaming.Xbox.*.x64.

Modificadores del compilador y del enlazador

Para las plataformas Gaming.Xbox.*.x64, la línea de comandos de clang/LLVM que se usa con clang-cl.exe incluye siempre lo siguiente:
Para Gaming.Xbox.Scarlett.x64, también agrega -march=znver2. Este modificador establece AVX2 y algunas otras características específicas de la CPU Hercules. Para Gaming.Xbox.XboxOne.x64, también agrega -march=btver2. Este modificador establece AVX, F16C y algunas otras características específicas de la CPU Jaguar. Para obtener más información sobre los modificadores recomendados para el desarrollo con el GDK, consulte Recomendaciones de modificadores del compilador y del enlazador de Visual C++.

Funciones intrínsecas de CPU compatibles

Clang/LLVM y GNUC tratan los tipos SIMD de SSE de forma diferente a Visual C++ y al compilador de Intel. En concreto, los tipos __m128, __m128i y __m128d son tipos opacos en lugar de structs, por lo que no puede crear funciones de C++ sobrecargadas que usen esos tipos. Esta diferencia también significa que el acceso directo a elementos a través de __m128.m128_f32[] no compila en clang. Para DirectXMath en Clang/LLVM, esta diferencia da como resultado que todas las sobrecargas de C++ de XMVECTOR estén deshabilitadas. También puede optar por este comportamiento en Visual C++ para lograr una mayor portabilidad definiendo el símbolo de preprocesador XM_NO_XMVECTOR_OVERLOADS antes de incluir los encabezados de DirectXMath. Visual C++ le permite usar funciones intrínsecas de instrucciones avanzadas incluso si no está compilando actualmente con /arch:AVX o /arch:AVX2, pero clang/LLVM no compila en este escenario sin los modificadores del compilador adecuados. Cuando use Clang/LLVM, debe agregar el modificador del compilador -march=btver2, -march=znver1, -march=znver2 o -mf16c para usar las funciones intrínsecas de conversión de media precisión F16C _mm_cvtph_ps o _mm_cvtps_ph. DirectXMath en el Windows 10 SDK (18363) o anterior usaba las funciones intrínsecas CPUID incorrectas para implementar XMVerifyCPUSupport en Clang/LLVM. Este problema está corregido para DirectXMath 3.14 en el Windows 10 SDK (19041) o posterior.

Uso de Clang/LLVM con msbuild

Para usar Clang/LLVM con un proyecto de msbuild, establezca el Platform Toolset en “LLVM (clang-cl)”. Puede encontrar Platform Toolset en la pestaña General del cuadro de diálogo de propiedades del proyecto de Visual C++, como se muestra en la siguiente figura. También puede establecer el conjunto de herramientas de Clang/LLVM estableciendo directamente la propiedad de msbuild PlatformToolset en ClangCl, como se muestra en el siguiente ejemplo.
De forma predeterminada, el compilador Clang/LLVM genera considerablemente más advertencias informativas en comparación con MSVC. Por lo tanto, para los lugares con ‘TODO’, verá tanto la salida de -W#pragma-messages como advertencia, como una advertencia -Wunused-value:

Uso de Clang/LLVM con cmake

Los ejemplos CMakeExample y CMakeGDKExample del GDK proporcionan un buen punto de partida para integrar Clang/LLVM en sus proyectos de cmake. Puede descargar estos ejemplos desde la página de descargas para desarrolladores de XBOX.
Asegúrese de que el componente de Visual Studio C++ CMake tools for Windows esté instalado antes de intentar agregar compatibilidad con Clang/LLVM a sus proyectos de cmake. Visual Studio 2019 (16.11) se distribuye con CMake 3.20. Visual Studio 2022 se distribuye con CMake 3.21 o posterior.

Uso de CMakeExample

Siga estos pasos para habilitar Clang/LLVM con el proyecto CMakeExample. CMakeExample se actualizó en marzo de 2022 para usar CMakePresets.json en lugar de la solución anterior CMakeSettings.json. Los valores preestablecidos de CMake están integrados con Visual Studio 2019 16.10 o posterior. Consulte esta entrada de blog.
  1. Use la opción Open Local Folder de Visual Studio para abrir la carpeta Desktop, XBOX Series X|S o XboxOne en la carpeta raíz de CMakeExample.

Integración con CMakePresets.json

  1. En el Explorador de soluciones, haga doble clic en el archivo CMakePresets.json.
Edite la variable XdkEditionTarget para que coincida con su edición actual del GDK.
  1. Seleccione el valor preestablecido x64-Debug-Clang o x64-Release-Clang.

Integración con CMakeSettings.json

  1. En el Explorador de soluciones, haga doble clic en el archivo CMakeSettings.json.
  2. Seleccione el icono PLUS y elija x64-Clang-Debug y x64-Clang-Release, como se muestra en la siguiente figura. Guarde los cambios.
  1. Seleccione Edit Json y, después, corte y pegue la sección variables de otra configuración en las nuevas configuraciones de Clang, como en el siguiente ejemplo. Establezca el valor de XDKEditionTarget en el adecuado para su versión del GDK, incluido el nivel de QFE.
  1. Después de guardar todos los cambios, seleccione x64-Clang-Debug o x64-Clang-Release en la lista desplegable de configuraciones de compilación y compile.

Uso de CMakeGDKExample

Siga estos pasos para habilitar Clang/LLVM con el proyecto CMakeGDKExample.
  1. Use la opción Open Local Folder de Visual Studio para abrir la carpeta CMakeGDKExample.

Integración con CMakePresets.json

  1. En el Explorador de soluciones, haga doble clic en el archivo CMakePresets.json.
Edite la variable XdkEditionTarget para que coincida con su edición actual del GDK.
  1. Seleccione el valor preestablecido x64-Scarlett-Clang o x64-XboxOne-Clang.

Integración con CMakeSettings.json

  1. En el Explorador de soluciones, haga doble clic en el archivo CMakeSettings.json.
  2. Seleccione la configuración que desea editar. Establezca el valor de Toolset en clang_cl_x64. Guarde y cierre.
  1. Para las configuraciones de XBOX One y XBOX Series X|S, seleccione Edit Json y asegúrese de que la variable XdkEditionTarget coincida con su edición del GDK y nivel de QFE.
  2. Seleccione el valor deseado en la lista desplegable de configuraciones y elija Rebuild All en el menú Build.
  3. Use File -> Open -> Project/Solution para seleccionar la solución y el proyecto generados. Por ejemplo:
CMakeGDKExample\out\build\GamingXboxOne-Debug\CMakeGDKExample.sln Ahora está listo para compilar e implementar su proyecto.

Obtención de soporte técnico

Para notificar errores del compilador de Visual C++, use Report a Problem… en Visual Studio Para notificar errores del compilador clang/LLVM, use https://bugs.llvm.org/ Para los informes de errores de la biblioteca estándar de C++ de Microsoft (también conocida como STL), use https://github.com/microsoft/STL/issues

Problemas conocidos

  • El conjunto de herramientas Clang/LLVM es considerablemente más detallado que Visual C++, especialmente cuando usa -Wall -Wextra -Wpedantic. Como mínimo, suprima las siguientes advertencias en la línea de comandos o como #pragma:
  • Las herramientas de XBOX solo funcionan con archivos PDB de Microsoft para los símbolos de depuración, y no admiten la información de depuración CodeView ni DWARF que emiten los archivos .ld de LLVM.
  • La implementación de la generación de código en tiempo de vínculo de Clang/LLVM es claramente diferente de la solución de Microsoft Visual C++. No puede mezclar código que use la generación de código en tiempo de vínculo entre MSVC y clang/LLVM.
  • A partir de la versión de octubre de 2022 y el Windows SDK (10.0.22621), las bibliotecas estáticas de C++ incluyen metadatos de eXtended Flow Control Guard (XFG). El enlazador ld anterior a la versión v15 siempre emite una advertencia inofensiva cuando usa estas bibliotecas:
  • La integración de MSBuild del administrador de paquetes vcpkg no funciona correctamente con lld-link, ya que usa caracteres comodín en los nombres de archivo de las bibliotecas. Puede evitar este problema estableciendo <UseLldLink>false</UseLldLink> en el vcxproj. Este problema no afecta a la integración de vcpkg con CMake mediante generadores de proyectos de VS.
  • Al compilar para XBOX con clang v18 en modo C++20, dos símbolos quedan sin definir al usar los encabezados de WRL debido a cambios en la evaluación de plantillas.
La siguiente solución alternativa resuelve el problema:

Consulte también

Visual Studio Recomendaciones de modificadores del compilador y del enlazador de Visual C++ Uso de CMake con Clang/LLVM Uso de MSBuild con Clang/LLVM
Última modificación el 28 de agosto de 2026