Versiones y componentes necesarios de Visual Studio
Se requiere Visual Studio versión 16.11 o posterior para usar Clang/LLVM con el Microsoft Game Development Kit (GDK). El componente C++ Clang Tools for Windows, dentro de Desktop Development with C++, debe estar seleccionado al instalar Visual Studio 2019. Según la versión de Visual Studio que uses, los componentes de Clang/LLVM necesarios pueden llamarse C++ Clang Compiler for Windows y C++ Clang-cl for v142 build tools (x64/x86).Si modificas tu instalación existente de Visual Studio para agregar C++ Clang Tools for Windows después de instalar el Microsoft Game Development Kit (GDK), tendrás que reparar la instalación del Microsoft Game Development Kit (GDK) antes de usar Clang/LLVM.
Gaming.Desktop.x64.
Modificadores del compilador y del enlazador
Para las plataformasGaming.Desktop.x64, la línea de comandos de clang/LLVM que se usa con clang-cl.exe siempre incluirá:
Intrínsecos 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 se consideran tipos opacos en lugar de structs, por lo que no puedes crear funciones sobrecargadas de C++ que usen esos tipos. Esto también significa que el acceso directo a los elementos mediante __m128.m128_f32[] no compilará en clang. Ten en cuenta que, para DirectXMath en Clang/LLVM, esto hace que todas las sobrecargas de C++ de XMVECTOR queden deshabilitadas. También puedes optar por este comportamiento en Visual C++ para lograr una mejor portabilidad si defines el símbolo de preprocesadorXM_NO_XMVECTOR_OVERLOADS antes de incluir los encabezados de DirectXMath.
En PC, puedes contar con que SSE y SSE2 son compatibles con todas las CPU nativas x64, ya que forman parte de la definición de la arquitectura. También puedes exigir de forma segura SSE3, ya que es compatible con todas las CPU modernas compatibles con Windows 10. Para DirectXMath, esto significa que puedes definir el símbolo de preprocesador _XM_SSE3_INTRINSICS_ y debes compilar con clang/LLVM usando -march=sse3.
Visual C++ te permitirá usar intrínsecos de instrucciones avanzadas incluso si no estás compilando actualmente con /arch:AVX o /arch:AVX2, pero clang/LLVM no podrá compilar en este escenario sin los modificadores de compilador adecuados. Asegúrate de realizar comprobaciones de compatibilidad de la CPU en tiempo de ejecución para todo lo que uses más allá de SSE2 en PC.
DirectXMath en el SDK de Windows 10 (18363) o anterior usaba los intrínsecos CPUID incorrectos para implementar XMVerifyCPUSupport para Clang/LLVM. Esto está corregido en DirectXMath 3.14 en el SDK de Windows 10 (19041) o posterior.
Uso de Clang/LLVM con msbuild
Para usar Clang/LLVM con un proyecto de msbuild, establece Platform Toolset en “LLVM (clang-cl)”. Platform Toolset se encuentra en la pestaña General del cuadro de diálogo de propiedades del proyecto de Visual C++, como se muestra en la siguiente figura. El conjunto de herramientas de Clang/LLVM también se puede establecer directamente asignando a la propiedad de msbuild PlatformToolset el valor ClangCl, como se muestra en el siguiente ejemplo.Uso de Clang/LLVM con cmake
Las muestras CMakeExample y CMakeGDKExample del Microsoft Game Development Kit (GDK) proporcionan un buen punto de partida para integrar Clang/LLVM en tus proyectos de cmake. Consulta las muestras del Microsoft Game Development Kit (GDK) para obtener instrucciones de descarga.Asegúrate de que el componente de Visual Studio C++ CMake tools for Windows esté instalado antes de intentar agregar compatibilidad con Clang/LLVM a tus proyectos de cmake. Visual Studio 2019 (16.11) incluye CMake 3.20. Visual Studio 2022 incluye CMake 3.21 o posterior.
Uso de CMakeExample
Sigue estos pasos para habilitar Clang/LLVM con el proyecto CMakeExample.- Usa la opción Open Local Folder de Visual Studio para abrir la carpeta Desktop en la carpeta raíz de CMakeExample.
CMakePresets.json en lugar de la solución anterior basada en CMakeSettings.json. Los valores preestablecidos de CMake están integrados con Visual Studio 2019 16.10 o posterior. Consulta esta entrada de blog.
Integración de CMakePresets.json
- Haz doble clic en el archivo CMakePresets.json en el Explorador de soluciones.
XdkEditionTarget para que coincida con tu edición actual del GDK.
- Selecciona el valor preestablecido
x64-Debug-Clangox64-Release-Clang.
Integración de CMakeSettings.json
- Haz doble clic en el archivo CMakeSettings.json en el Explorador de soluciones.
- Selecciona el icono “PLUS” y elige “x64-Clang-Debug” o “x64-Clang-Release”, como se muestra en la siguiente figura. Guarda los cambios.
- Haz clic en “Edit Json” y, a continuación, corta y pega la sección de variables de otra configuración en las nuevas configuraciones de Clang, como en el siguiente ejemplo. Establece el valor de XDKEditionTarget en el adecuado para tu versión del GDK, incluido el nivel de QFE.
- Después de guardar todos los cambios, selecciona x64-Clang-Debug o x64-Clang-Release en la lista desplegable de configuraciones de compilación y compila.
Uso de CMakeGDKExample
Sigue estos pasos para habilitar Clang/LLVM con el proyecto CMakeGDKExample.- Usa la opción Open Local Folder de Visual Studio para abrir la carpeta CMakeGDKExample.
Integración de CMakePresets.json
- Haz doble clic en el archivo CMakePresets.json en el Explorador de soluciones.
XdkEditionTarget para que coincida con tu edición actual del GDK.
- Selecciona el valor preestablecido
x64-Desktop-Clang.
Integración de CMakeSettings.json
- Haz doble clic en el archivo CMakeSettings.json en el Explorador de soluciones.
- Selecciona la configuración que quieras editar y establece el valor de Toolset en “clang_cl_x64”. Guarda y cierra.
- Para las configuraciones de XBOX One y XBOX Series X|S, selecciona Edit Json y asegúrate de que la variable XdkEditionTarget coincide con tu edición del GDK y el nivel de QFE.
- Selecciona el valor deseado en la lista desplegable de configuraciones y elige Rebuild All en el menú Build.
- Usa File -> Open -> Project/Solution para seleccionar la solución o el proyecto generado. Por ejemplo:
Obtención de soporte técnico
Para notificar errores del compilador de Visual C++, usa Report a Problem… en Visual Studio Para notificar errores del compilador clang/LLVM, usa https://bugs.llvm.org/ Para notificar errores de la biblioteca C++ estándar de Microsoft (también conocida como STL), usa https://github.com/microsoft/STL/issuesProblemas conocidos
- El conjunto de herramientas de Clang/LLVM es bastante más detallado que Visual C++, especialmente al usar -Wall -Wextra -Wpedantic. Como mínimo, suprime las siguientes advertencias, ya sea en la línea de comandos o como un #pragma:
- Las herramientas del Microsoft Game Development Kit (GDK) solo funcionan con PDB de Microsoft para los símbolos de depuración y no admiten la información de depuración CodeView o DWARF emitida en 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++. El código que usa la generación de código en tiempo de vínculo no se puede mezclar entre MSVC y clang/LLVM.
-
A partir de la versión de octubre de 2022 y el SDK de Windows (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 emitirá una advertencia inofensiva al usar estas bibliotecas:
