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.
Gaming.Xbox.*.x64.
Modificadores del compilador y del enlazador
Para las plataformasGaming.Xbox.*.x64, la línea de comandos de clang/LLVM que se usa con clang-cl.exe incluye siempre lo siguiente:
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++ deXMVECTOR 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.-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 usarCMakePresets.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.
- 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
- En el Explorador de soluciones, haga doble clic en el archivo CMakePresets.json.
XdkEditionTarget para que coincida con su edición actual del GDK.
- Seleccione el valor preestablecido
x64-Debug-Clangox64-Release-Clang.
Integración con CMakeSettings.json
- En el Explorador de soluciones, haga doble clic en el archivo CMakeSettings.json.
- Seleccione el icono PLUS y elija x64-Clang-Debug y x64-Clang-Release, como se muestra en la siguiente figura. Guarde los cambios.
- 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
XDKEditionTargeten el adecuado para su versión del GDK, incluido el nivel de QFE.
- 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.- Use la opción Open Local Folder de Visual Studio para abrir la carpeta CMakeGDKExample.
Integración con CMakePresets.json
- En el Explorador de soluciones, haga doble clic en el archivo CMakePresets.json.
XdkEditionTarget para que coincida con su edición actual del GDK.
- Seleccione el valor preestablecido
x64-Scarlett-Clangox64-XboxOne-Clang.
Integración con CMakeSettings.json
- En el Explorador de soluciones, haga doble clic en el archivo CMakeSettings.json.
-
Seleccione la configuración que desea editar. Establezca el valor de Toolset en
clang_cl_x64. Guarde y cierre.
-
Para las configuraciones de XBOX One y XBOX Series X|S, seleccione Edit Json y asegúrese de que la variable
XdkEditionTargetcoincida con su edición del GDK y nivel de QFE. - Seleccione el valor deseado en la lista desplegable de configuraciones y elija Rebuild All en el menú Build.
- Use File -> Open -> Project/Solution para seleccionar la solución y el proyecto generados. Por ejemplo:
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/issuesProblemas 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
.ldde 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
ldanterior 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.
