[UE5] コンパイラーバージョンの指定方法

アンリアルエンジンはC++で記述されており、Windows向けのビルドでは主にVisualStudioのコンパイラが使われます。
公式ドキュメントにUEのバージョンごとに対応したVisuaslStudioのバージョンに関して記載があります。

https://docs.unrealengine.com/5.1/ja/setting-up-visual-studio-development-environment-for-cplusplus-projects-in-unreal-engine/

VisualStudioはとてもバージョンアップ速度が速く(ほぼ毎月更新があります！！)様々な機能追加やバグ修正がおこなわれています。基本的にはインストール時に最新版がインストールされますが、VisualStudioとUEのバージョンの組み合わせによって問題が発生する可能性があります。
今回はこれらのバージョンにまつわる問題の対処方法についての記事です。

# 最適なバージョンをしらべよう

公式ドキュメントにはVisualStudioのメジャーバージョンについて記述がありますが、細かいバージョンについては言及がありません。
エンジン開発時に想定しているVisualStudioについてはUnrealBuildToolのソース内に記述があります。

```[エンジンのルート]\Engine\Source\Programs\UnrealBuildTool\Platform\Windows\MicrosoftPlatformSDK.Versions.cs
		static readonly VersionNumberRange[] PreferredVisualCppVersions = new VersionNumberRange[]
		{
			VersionNumberRange.Parse("14.29.30133", "14.29.99999"), // VS2019 16.11.x
			VersionNumberRange.Parse("14.33.31629", "14.33.99999"), // VS2022 17.3.x
		};

```

上はUE5.1から抜粋したものですが、コメントより `VS2019 16.11` および `VS2022 17.3` を想定していることがわかります！

# 特定のバージョンのコンパイラをインストールしよう

新しすぎるバージョンをインストールしてしまった後に問題が発生したので古いバージョンのVisualStudioをインストールしなおすということを検討してもいいのですが、VisualStudioはサポートされている範囲内で複数のバージョンのコンパイラをインストールすることも可能です。

VisualStuidoのメニュー > ツール(Toos) > ツールと機能の取得(Get Tools and Features) と押してインストーラーを起動し、インストーラーの上のタブで個別のコンポーネント(Individual components)の中から欲しいバージョンにチェックを入れてインストールすることが可能です。
また同様に不要であればチェックを外すことでアンインストールも可能です。
VisualCのコンパイラは「MSVC v*** VS 2022 x64/x86 build tools ~」という名前になっており末尾の (v14.33-17.3) という部分でバージョンを確認することができます。
※左側のv14.33の部分がコンパイラのバージョンで右側の17.3がVisualStudioのバージョン

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464248/8566cbfc-c0df-bc2c-adf8-1575794ef074.png)


# 複数のバージョンがインストールされている場合
複数のバージョンがインストールされている環境では特に指定がなければ最新版が使われます。
どのバージョンが使われているかはコンパイル時のログにも
```
1>Using Visual Studio 2022 14.33.31631 toolchain (C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.33.31629) and Windows 10.0.19041.0 SDK (C:\Program Files (x86)\Windows Kits\10).
```
といった形で出力されているので確認してみてください。
特定のバージョンだけをインストールし最新版をアンインストールしてしまうことも一つの手ですが、複数のバージョンを維持しておいた上で幾つかの方法で任意のバージョンを使うことを強制することも可能です。
※指定したバージョンがインストールされいていないとエラーになります。

## 1. BuildConfiguration.xml ( PC全体 または PC内の特定のエンジン毎 )
一つ目はBuildConfiguration.xmlを設定する方法です。自分だけが特定のバージョンを使いたい場合はこの方法が適切です。
BuildConfiguration.xmlはソリューションエクスプローラーからブラウズできます。
以下は記述例です。

```xml
<?xml version="1.0" encoding="utf-8" ?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
	<WindowsPlatform>
		<Compiler>VisualStudio2022</Compiler>
		<CompilerVersion>14.33.31629</CompilerVersion>
	</WindowsPlatform>
</Configuration>
```

## 2. Target.csファイルに記述する
各プロジェクト毎のターゲット毎に設定してチーム開発のメンバーで共有したい場合はこの方法を選ぶことが出来ます。

```c++
	public MyProjectEditorTarget(TargetInfo Target) : base(Target)
	{
...
		WindowsPlatform.Compiler = WindowsCompiler.VisualStudio2022;
        WindowsPlatform.CompilerVersion = "14.32.31326";
	}
``` 

## 3. iniファイルに記述する

DefaultEngine.iniに以下のような記述を追加することでもバージョン指定が可能です。

```Config/DefaultEngine.ini
[/Script/WindowsTargetPlatform.WindowsTargetSettings]
Compiler=VisualStudio2022
CompilerVersion="14.33.31629"
```

# まとめ
エンジンを更新したり、VisualStudioをインストールしたり更新したあとに謎のコンパイルエラーに出くわしてしまったら、今回のブログにある方法でバージョンなどを確認してください。
コンパイラバージョンと同じく **WindowsSDKのバージョン** によって問題が起こることもありえます。こちらも同様にMicrosoftPlatformSDK.Versions.csに想定したバージョンが記述されていて、VisualStudioのツールと機能の取得よりアンインストール/インストールが可能となっています。合わせてご確認ください。