Versions et composants de Visual Studio requis
Vous avez besoin de Visual Studio version 16.11 ou ultérieure pour utiliser Clang/LLVM avec le GDK. Sélectionnez le composant C++ Clang Compiler for Windows sous Composants individuels lors de l’installation de Visual Studio.
Si vous modifiez votre installation existante de Visual Studio pour ajouter C++ Clang Compiler for Windows après l’installation du GDK, vous devez réparer votre installation du GDK avant d’utiliser Clang/LLVM.
Gaming.Xbox.*.x64.
Commutateurs du compilateur et de l’éditeur de liens
Pour les plateformesGaming.Xbox.*.x64, la ligne de commande clang/LLVM utilisée avec clang-cl.exe inclut toujours les éléments suivants :
Gaming.Xbox.Scarlett.x64, elle ajoute également -march=znver2. Ce commutateur active AVX2 et quelques autres fonctionnalités propres au processeur Hercules.
Pour Gaming.Xbox.XboxOne.x64, elle ajoute également -march=btver2. Ce commutateur active AVX, F16C et quelques autres fonctionnalités propres au processeur Jaguar.
Pour plus d’informations sur les commutateurs recommandés pour le développement avec le GDK, voir Recommandations relatives aux commutateurs du compilateur et de l’éditeur de liens Visual C++.
Intrinsèques CPU prises en charge
Clang/LLVM et GNUC traitent les types SIMD SSE différemment de Visual C++ et du compilateur Intel. Plus précisément, les types __m128, __m128i et __m128d sont des types opaques plutôt que des structs ; vous ne pouvez donc pas créer de fonctions C++ surchargées utilisant ces types. Cette différence signifie également que l’accès direct aux éléments via __m128.m128_f32[] ne se compile pas avec clang. Pour DirectXMath avec Clang/LLVM, cette différence entraîne la désactivation de toutes les surcharges C++ deXMVECTOR. Vous pouvez également adopter ce comportement avec Visual C++ pour une meilleure portabilité en définissant le symbole de préprocesseur XM_NO_XMVECTOR_OVERLOADS avant d’inclure les en-têtes DirectXMath.
Visual C++ vous permet d’utiliser des intrinsèques d’instructions avancées même si vous ne générez pas actuellement avec /arch:AVX ou /arch:AVX2, mais avec clang/LLVM, la build échoue dans ce scénario sans les commutateurs de compilateur appropriés.
Lorsque vous utilisez Clang/LLVM, vous devez ajouter le commutateur de compilateur -march=btver2, -march=znver1, -march=znver2 ou -mf16c pour utiliser les intrinsèques de conversion en demi-précision F16C _mm_cvtph_ps ou _mm_cvtps_ph.
DirectXMath dans le Windows 10 SDK (18363) ou version antérieure utilisait les mauvaises intrinsèques CPUID pour implémenter XMVerifyCPUSupport pour Clang/LLVM. Ce problème est corrigé dans DirectXMath 3.14 du Windows 10 SDK (19041) ou version ultérieure.
Utilisation de Clang/LLVM avec msbuild
Pour utiliser Clang/LLVM avec un projet msbuild, définissez l’Ensemble d’outils de plateforme sur “LLVM (clang-cl)”. L’Ensemble d’outils de plateforme se trouve sous l’onglet Général de la boîte de dialogue des propriétés du projet Visual C++, comme illustré dans la figure suivante.
-W#pragma-messages sous forme d’avertissement et un avertissement -Wunused-value :
Utilisation de Clang/LLVM avec cmake
Les exemples CMakeExample et CMakeGDKExample du GDK constituent un bon point de départ pour intégrer Clang/LLVM à vos projets cmake. Vous pouvez télécharger ces exemples depuis la page XBOX Developer Downloads.Assurez-vous que le composant Visual Studio C++ CMake tools for Windows est installé avant de tenter d’ajouter la prise en charge de Clang/LLVM à vos projets cmake. Visual Studio 2019 (16.11) est fourni avec CMake 3.20. Visual Studio 2022 est fourni avec CMake 3.21 ou version ultérieure.
Utilisation de CMakeExample
Procédez comme suit pour activer Clang/LLVM avec le projet CMakeExample. CMakeExample a été mis à jour en mars 2022 pour utiliserCMakePresets.json au lieu de l’ancienne solution CMakeSettings.json. Les préréglages CMake sont intégrés à Visual Studio 2019 16.10 ou version ultérieure. Voir ce billet de blog.
- Utilisez l’option Ouvrir un dossier local de Visual Studio pour ouvrir le dossier Desktop, XBOX Series X|S ou XboxOne situé dans le dossier racine de CMakeExample.
Intégration de CMakePresets.json
- Dans l’Explorateur de solutions, double-cliquez sur le fichier CMakePresets.json.
XdkEditionTarget pour qu’elle corresponde à votre édition actuelle du GDK.
- Sélectionnez le préréglage
x64-Debug-Clangoux64-Release-Clang.
Intégration de CMakeSettings.json
- Dans l’Explorateur de solutions, double-cliquez sur le fichier CMakeSettings.json.
- Sélectionnez l’icône PLUS et choisissez x64-Clang-Debug et x64-Clang-Release, comme illustré dans la figure suivante. Enregistrez les modifications.

- Sélectionnez Edit Json, puis coupez-collez la section des variables d’une autre configuration vers les nouvelles configurations Clang, comme dans l’exemple suivant. Définissez la valeur de
XDKEditionTargetsur celle qui correspond à votre version du GDK, y compris le niveau de QFE.
- Après avoir enregistré toutes les modifications, sélectionnez x64-Clang-Debug ou x64-Clang-Release dans la liste déroulante de configuration de build, puis lancez la génération.
Utilisation de CMakeGDKExample
Procédez comme suit pour activer Clang/LLVM avec le projet CMakeGDKExample.- Utilisez l’option Ouvrir un dossier local de Visual Studio pour ouvrir le dossier CMakeGDKExample.
Intégration de CMakePresets.json
- Dans l’Explorateur de solutions, double-cliquez sur le fichier CMakePresets.json.
XdkEditionTarget pour qu’elle corresponde à votre édition actuelle du GDK.
- Sélectionnez le préréglage
x64-Scarlett-Clangoux64-XboxOne-Clang.
Intégration de CMakeSettings.json
- Dans l’Explorateur de solutions, double-cliquez sur le fichier CMakeSettings.json.
-
Sélectionnez la configuration que vous voulez modifier. Définissez la valeur de Toolset sur
clang_cl_x64. Enregistrez et fermez.

-
Pour les configurations XBOX One et XBOX Series X|S, sélectionnez Edit Json et assurez-vous que la variable
XdkEditionTargetcorrespond à votre édition du GDK et à votre niveau de QFE. - Sélectionnez la valeur souhaitée dans la liste déroulante de configuration et choisissez Régénérer tout dans le menu Générer.
- Utilisez Fichier -> Ouvrir -> Projet/Solution pour sélectionner la solution et le projet générés. Par exemple :
Obtenir de l’aide
Pour signaler des bogues du compilateur Visual C++, utilisez Signaler un problème… dans Visual Studio Pour signaler des bogues du compilateur clang/LLVM, utilisez https://bugs.llvm.org/ Pour signaler des bogues de la bibliothèque C++ standard Microsoft (également appelée STL), utilisez https://github.com/microsoft/STL/issuesProblèmes connus
- L’ensemble d’outils Clang/LLVM est beaucoup plus verbeux que Visual C++, en particulier lorsque vous utilisez
-Wall -Wextra -Wpedantic. Au minimum, supprimez les avertissements suivants, soit sur la ligne de commande, soit à l’aide d’un#pragma:
-
Les outils XBOX fonctionnent uniquement avec les PDB Microsoft pour les symboles de débogage, et ne prennent pas en charge les informations de débogage CodeView ou DWARF émises dans les fichiers
.ldde LLVM. - L’implémentation de la génération de code au moment de l’édition de liens de Clang/LLVM est nettement différente de la solution Microsoft Visual C++. Vous ne pouvez pas mélanger entre MSVC et clang/LLVM du code qui utilise la génération de code au moment de l’édition de liens.
-
Depuis la version d’octobre 2022 et le Windows SDK (10.0.22621), les bibliothèques statiques C++ incluent des métadonnées eXtended Flow Control Guard (XFG). L’éditeur de liens
ldantérieur à la version v15 émet toujours un avertissement sans conséquence lorsque vous utilisez ces bibliothèques :
-
L’intégration MSBuild du gestionnaire de packages vcpkg ne fonctionne pas correctement avec
lld-link, car elle utilise des caractères génériques dans les noms de fichiers de bibliothèques. Vous pouvez contourner ce problème en définissant<UseLldLink>false</UseLldLink>dans le fichier vcxproj. Ce problème n’affecte pas l’intégration CMake de vcpkg avec les générateurs de projets VS. - Lors d’une génération pour XBOX avec clang v18 en mode C++20, deux symboles ne sont pas définis lors de l’utilisation des en-têtes WRL, en raison de modifications de l’évaluation des modèles.
