まず Build.cs に以下の変更を行う。MyArg と MY_ARG の部分は自分のものに置き換えてください。
1. コマンドライン引数を定義する
[CommandLine("-MyArg")]
public bool bMyArg = false;
2. コマンドライン引数を適用する
new CommandLineArguments(Environment.GetCommandLineArgs()).ApplyTo(this);
3. プリプロセッサの定義を追加する
PublicDefinitions.Add($"MY_ARG={Convert.ToInt32(bMyArg)}");
まとめると以下のようになる。
MyProject.Build.cs
using EpicGames.Core;
using System;
using UnrealBuildTool;
public class MyProject : ModuleRules
{
[CommandLine("-MyArg")]
public bool bMyArg = false;
public MyProject(ReadOnlyTargetRules Target) : base(Target)
{
// ...
new CommandLineArguments(Environment.GetCommandLineArgs()).ApplyTo(this);
PublicDefinitions.Add($"MY_ARG={Convert.ToInt32(bMyArg)}");
}
}
この状態で UBT の場合は -MyArg、UAT の場合は -UBTArgs=-MyArg という引数を渡してビルドすれば #define MY_ARG 1 となり、以下のようなプリプロセッサでスイッチするコードを書けるようになる。
#if MY_ARG
UE_LOG(LogTemp, Log, TEXT("MY_ARG=1"));
#else
UE_LOG(LogTemp, Log, TEXT("MY_ARG=0"));
#endif
参考: