🔨
[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内での登録処理は不要になる模様。
Discussion