🔨

[UE5] プリコンパイルヘッダが見つからず、Shippingビルドがコケる

に公開

Missing precompiled manifest for 'Settings'

Developmentビルドだと出ないが、Shippingビルドだと、「Missing precompiled manifest for 'Settings'」というエラーが出てコンパイルに失敗する問題に遭遇した。

どうやらEditorビルド(とデバッグビルド?)でしか使えないモジュールが設定されており、そのプリコンパイル済みヘッダーがShippingビルド設定の時には見つからないためエラーが起きるっぽい。

泥臭いが、該当のSettingsモジュールを使っている個所で、分岐させてあげればビルドが通った。

エディタもしくはShippingビルド以外だけモジュールを使用する分岐

#if WITH_EDITOR || (!UE_BUILD_SHIPPING)
// something
#endif

全ソース

// Copyright Epic Games, Inc. All Rights Reserved.

#include "K2_Alice2.h"
#include "Modules/ModuleManager.h"
#include "Private/Parameter/ParamManager.h"

#if WITH_EDITOR || (!UE_BUILD_SHIPPING)
// Settingsモジュールのヘッダ
#include "ISettingsModule.h"
#endif

DEFINE_LOG_CATEGORY(LogK2_Alice2)
#define LOCTEXT_NAMESPACE "FAlice2ProjectModule"

class FAlice2ProjectModule : public FDefaultGameModuleImpl
{
	virtual void StartupModule() override;
	virtual void ShutdownModule() override;
};

IMPLEMENT_PRIMARY_GAME_MODULE(FAlice2ProjectModule, K2_Alice2, "K2_Alice2");

void FAlice2ProjectModule::StartupModule()
{
#if WITH_EDITOR || (!UE_BUILD_SHIPPING)
    // Settingsモジュールを使っているところ
	ISettingsModule *SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>("Settings");
	if (SettingsModule != nullptr)
	{
		SettingsModule->RegisterSettings(
			"Project",
			"Project",
			"Parameter",
			LOCTEXT("ParameterName", "Parameter"),
			LOCTEXT("ParameterDesc", "パラメーター関連の設定"),
			GetMutableDefault<UParamManager>());
	}
#endif
}

void FAlice2ProjectModule::ShutdownModule()
{
#if WITH_EDITOR || (!UE_BUILD_SHIPPING)
// Settingsモジュールを使っているところ
	ISettingsModule *SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>("Settings");
	if (SettingsModule != nullptr)
	{
		SettingsModule->UnregisterSettings(
			"Project",
			"Project",
			"Parameter");
	}
#endif
}
#undef LOCTEXT_NAMESPACE

<追記>

そもそもInitModule内でSettingsモジュールを呼び出すのがよくなさそう。
Project設定画面に任意の項目を追加する場合、ISettingModuleを実装するのではなく、UDeveloperSettingsを継承する方法であれば、InitModule内での登録処理は不要になる模様。

参考

https://historia.co.jp/archives/4095/

Discussion