Skip to main content
Clang/LLVM を使用した GDK タイトルの開発は、Visual Studio 2019 または 2022 と clang/LLVM for Windows ツールセット v12 以降を使用して正式にサポートされています。このツールセットは Visual C/C++ ランタイム (Universal CRT ライブラリ + Microsoft STL) を使用します。それ以外のツールセットとランタイムの組み合わせは、正常に動作しない、またはタイトル認証を通過しない可能性があります。 LLVM (clang-cl) プラットフォーム ツールセット (すなわち ClangCL) を使用する Clang/LLVM for Windows では、Microsoft Standard C++ Library を使用します。

必要な Visual Studio のバージョンとコンポーネント

Microsoft Game Development Kit (GDK) で Clang/LLVM を使用するには、Visual Studio バージョン 16.11 以降が必要です。Visual Studio 2019 のインストール時には、[C++ によるデスクトップ開発] 下の [C++ Clang Tools for Windows] コンポーネントを選択する必要があります。 使用している Visual Studio のバージョンによっては、必要な Clang/LLVM コンポーネントの名前が [C++ Clang Compiler for Windows] および [C++ Clang-cl for v142 build tools (x64/x86)] となっている場合があります。
Microsoft Game Development Kit (GDK) をインストールした後で、既存の Visual Studio インストールを変更して [C++ Clang Tools for Windows] を追加した場合は、Clang/LLVM を使用する前に Microsoft Game Development Kit (GDK) のインストールを修復する必要があります。
[C++ Clang Tools for Windows] コンポーネントがインストールされていれば、Microsoft Game Development Kit (GDK) のセットアップにより、Gaming.Desktop.x64 プラットフォーム用の ClangCl プラットフォーム ツールセットのサポートがインストールされます。

コンパイラおよびリンカーのスイッチ

Gaming.Desktop.x64 プラットフォームで clang-cl.exe と共に使用される clang/LLVM のコマンド ラインには、常に次のオプションが含まれます。

サポートされる CPU 組み込み関数

Clang/LLVM および GNUC は、SSE SIMD 型を Visual C++ や Intel Compiler とは異なる方法で扱います。具体的には、__m128、__m128i、__m128d 型は構造体ではなく不透明な型として扱われるため、これらの型を使用した C++ オーバーロード関数を作成できません。これは、__m128.m128_f32[] を介した要素への直接アクセスも clang ではコンパイルされないことを意味します。 Clang/LLVM 上の DirectXMath では、その結果として、すべての XMVECTOR C++ オーバーロードが無効化されます。移植性を高めるために、DirectXMath ヘッダーをインクルードする前にプリプロセッサ シンボル XM_NO_XMVECTOR_OVERLOADS を定義することで、Visual C++ でもこの動作を選択できます。 PC の場合、SSE および SSE2 はアーキテクチャ定義の一部であるため、すべての x64 ネイティブ CPU でサポートされていることを前提とできます。また、SSE3 は Windows 10 でサポートされるすべての最新 CPU でサポートされているため、安全に要求できます。DirectXMath については、これはプリプロセッサ定義 _XM_SSE3_INTRINSICS_ を定義し、clang/LLVM で -march=sse3 を使用してビルドする必要があることを意味します。 Visual C++ では、現在 /arch:AVX または /arch:AVX2 でビルドしていなくても高度な命令組み込み関数を使用できますが、clang/LLVM では適切なコンパイラ スイッチがない限りこのシナリオでビルドに失敗します。PC で SSE2 を超えるものを使用する場合は、必ず実行時に CPU サポート チェックを行ってください。 Windows 10 SDK (18363) 以前の DirectXMath は、Clang/LLVM 向けに XMVerifyCPUSupport を実装する際に誤った CPUID 組み込み関数を使用していました。これは Windows 10 SDK (19041) 以降の DirectXMath 3.14 で修正されています。

msbuild での Clang/LLVM の使用

msbuild プロジェクトで Clang/LLVM を使用するには、[プラットフォーム ツールセット] を「LLVM (clang-cl)」に設定します。[プラットフォーム ツールセット] は、次の図に示すように、Visual C++ プロジェクトのプロパティ ダイアログの [全般] タブ下にあります。 Clang/LLVM ツールセットは、次の例に示すように、msbuild プロパティの PlatformToolset を直接 ClangCl に設定することでも指定できます。
既定では、Clang/LLVM コンパイラは MSVC に比べて情報メッセージの警告を大幅に多く生成します。したがって、‘TODO’ の箇所では、-W#pragma-messages の出力が警告として表示され、さらに -Wunused-value の警告も表示されます。

cmake での Clang/LLVM の使用

CMakeExample および CMakeGDKExample の Microsoft Game Development Kit (GDK) サンプルは、cmake プロジェクトに Clang/LLVM を統合する際の良い出発点となります。ダウンロード手順については、Microsoft Game Development Kit (GDK) サンプルを参照してください。
cmake プロジェクトに Clang/LLVM サポートを追加する前に、Visual Studio コンポーネントの [C++ CMake tools for Windows] がインストールされていることを確認してください。Visual Studio 2019 (16.11) には CMake 3.20 が付属しています。Visual Studio 2022 には CMake 3.21 以降が付属しています。

CMakeExample を使用する

CMakeExample プロジェクトで Clang/LLVM を有効にするには、次の手順に従います。
  1. Visual Studio の [ローカル フォルダーを開く] オプションを使用して、CMakeExample のルート フォルダー内の Desktop フォルダーを開きます。
CMakeExample は 2022 年 3 月に、古い CMakeSettings.json ソリューションではなく CMakePresets.json を使用するように更新されました。CMake プリセットは Visual Studio 2019 16.10 以降に統合されています。このブログ投稿を参照してください。

CMakePresets.json の統合

  1. ソリューション エクスプローラーで CMakePresets.json ファイルをダブルクリックします。
XdkEditionTarget 変数を編集して、現在の GDK エディションと一致させます。
  1. x64-Debug-Clang または x64-Release-Clang プリセットを選択します。

CMakeSettings.json の統合

  1. ソリューション エクスプローラーで CMakeSettings.json ファイルをダブルクリックします。
  2. 次の図に示すように、「PLUS」アイコンを選択し、「x64-Clang-Debug」または「x64-Clang-Release」を選択します。変更を保存します。
  1. [Edit Json] をクリックし、次の例のように別の構成の variables セクションを新しい Clang 構成に切り取って貼り付けます。QFE レベルを含め、お使いの GDK のバージョンに適した値を XDKEditionTarget に設定します。
  1. すべての変更を保存した後、ビルド構成のドロップダウンから x64-Clang-Debug または x64-Clang-Release を選択し、ビルドします。

CMakeGDKExample を使用する

CMakeGDKExample プロジェクトで Clang/LLVM を有効にするには、次の手順に従います。
  1. Visual Studio の [ローカル フォルダーを開く] オプションを使用して、CMakeGDKExample フォルダーを開きます。

CMakePresets.json の統合

  1. ソリューション エクスプローラーで CMakePresets.json ファイルをダブルクリックします。
XdkEditionTarget 変数を編集して、現在の GDK エディションと一致させます。
  1. x64-Desktop-Clang プリセットを選択します。

CMakeSettings.json の統合

  1. ソリューション エクスプローラーで CMakeSettings.json ファイルをダブルクリックします。
  2. 編集したい構成を選択し、Toolset の値を「clang_cl_x64」に設定します。保存して閉じます。
  1. XBOX One および XBOX Series X|S 構成については、[Edit Json] を選択し、XdkEditionTarget 変数が GDK エディションおよび QFE レベルと一致していることを確認します。
  2. 構成ドロップダウンから目的の値を選択し、[ビルド] メニューから [すべてリビルド] を選択します。
  3. [ファイル] -> [開く] -> [プロジェクト/ソリューション] を使用して、生成されたソリューション/プロジェクトを選択します。例:
CMakeGDKExample\out\build\GamingXboxOne-Debug\CMakeGDKExample.sln これで、プロジェクトのビルドとデプロイの準備が整いました。

サポートの取得

Visual C++ コンパイラのバグ報告には、Visual Studio の「問題の報告…」を使用してください。 clang/LLVM コンパイラのバグ報告には、https://bugs.llvm.org/ を使用してください。 Microsoft Standard C++ Library (別名 STL) のバグ報告には、https://github.com/microsoft/STL/issues を使用してください。

既知の問題

  • Clang/LLVM ツールセットは Visual C++ に比べて、特に -Wall -Wextra -Wpedantic を使用するとかなり冗長になります。少なくとも、次の警告をコマンド ラインまたは #pragma で抑制してください。
  • Microsoft Game Development Kit (GDK) のツールは、デバッグ シンボルとして Microsoft PDB のみをサポートし、LLVM .ld ファイルで出力される CodeView や DWARF デバッグ情報はサポートしません。
  • Clang/LLVM のリンク時コード生成 (Link-Time Code Generation) の実装は、Microsoft Visual C++ のソリューションとは明確に異なります。リンク時コード生成を使用するコードは、MSVC と clang/LLVM を混在させることはできません。
  • 2022 年 10 月のリリースおよび Windows SDK (10.0.22621) 以降、C++ 静的ライブラリには eXtended Flow Control Guard (XFG) メタデータが含まれます。v15 リリース以前の ld リンカーは、これらのライブラリを使用すると常に無害な警告を出力します。

関連項目

Visual Studio CMake での Clang/LLVM の使用 MSBuild での Clang/LLVM の使用
最終更新日 2026年8月24日