ユーザ用ツール

サイト用ツール


ue4:buildsystem

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
ue4:buildsystem [2020/08/22 22:04]
oga [UnrealHeaderTool Build の回避]
ue4:buildsystem [2022/03/17 21:58] (現在)
oga [Unity Build]
行 4: 行 4:
 その中心になるのが C# で記述された UnrealBuildTool になります。 その中心になるのが C# で記述された UnrealBuildTool になります。
  
-各 Module の Build file (Makefile 相当) も *.Build.cs と言う名前の C# で書かれています。+各 Module のビルド定義 (Makefile 相当) も *.Build.cs と言う名前のファイルで C# 言語で書かれています。
  
 主に2つの機能があります。 主に2つの機能があります。
行 11: 行 11:
   * ビルドの実行   * ビルドの実行
  
-Project File の生成は Debug など IDE を利用するためのものあって、ビルドそのものには利用していません。 +IDE 向けに生成する Project File はデバッグが目的す。 
-ビルド自体は UnrealBuildTool が行います。+IDE Native のビルドツールは使われおらず、ビルドそのものは UnrealBuildTool が行っています。
  
  
行 38: 行 38:
 ^ Executor           ^ 説明    ^ ^ Executor           ^ 説明    ^
 | LocalExecutor      | Network を使わずに PC の Local CPU だけでビルドします。並列ビルドしますが、HT が有効な場合すべての Thread が使われないという問題があります。設定で変更可能ですが、デフォルトだと本来の速度よりもビルド速度が落ちているので注意。今はほとんど使われていません。  | | LocalExecutor      | Network を使わずに PC の Local CPU だけでビルドします。並列ビルドしますが、HT が有効な場合すべての Thread が使われないという問題があります。設定で変更可能ですが、デフォルトだと本来の速度よりもビルド速度が落ちているので注意。今はほとんど使われていません。  |
-| ParallelExecutor   | Local CPU 用の新しい Executor で、LocalExecutor よりも高速です。設定不要ですべての CPU core とすべての Thread を使います。  |+| ParallelExecutor   | Local CPU 用の新しい Executor で、LocalExecutor よりも高速です。HyperThreading 対応 CPU 場合、すべてのスレッドを使用するには BuildConfiguration.xml への設定が必要です。  |
 | XGE                | 有料の分散ビルドツール IncrediBuild を install している場合に使用します。CPU/Thread 数に応じたライセンスが必要です。    | | XGE                | 有料の分散ビルドツール IncrediBuild を install している場合に使用します。CPU/Thread 数に応じたライセンスが必要です。    |
 | HybridExecutor     | XGE と同じですが、分散ビルドと同時に Local の CPU も最大限活用します。IncrediBuild のライセンスよりも CPU core 数が多い場合に有効かもしれません。未確認   | | HybridExecutor     | XGE と同じですが、分散ビルドと同時に Local の CPU も最大限活用します。IncrediBuild のライセンスよりも CPU core 数が多い場合に有効かもしれません。未確認   |
 | SNDBS              | SONY の分散ビルドツール SN-DBS を install している場合に使用します。     | | SNDBS              | SONY の分散ビルドツール SN-DBS を install している場合に使用します。     |
 | Distcc             | macOS 上で分散ビルドツールの Distcc を用いる場合にこの Executor を使います。   | | Distcc             | macOS 上で分散ビルドツールの Distcc を用いる場合にこの Executor を使います。   |
 +| FASTBuild          | オープンソースの分散ビルドツール FASTbuild を使用する場合に用いられます。   |
  
  
行 59: 行 60:
  
 例えば UE4 Engine の場合、Engine/Intermediate/Buld/BuildRules/UE4Rules.dll になります。 例えば UE4 Engine の場合、Engine/Intermediate/Buld/BuildRules/UE4Rules.dll になります。
-dll は必要なときしか作られないため cache としても機能します。+dll は必要なときしか作られないため cache としても機能します。
  
  
行 104: 行 105:
 ==== Unity Build ==== ==== Unity Build ====
  
-UnrealBuildTool はデフォルトで UnityBuild を行います。設定で無効化することができます。+UnrealBuildTool はデフォルトで UnityBuild を行います。BuildConfiguration.xml の設定で無効化することができます。
  
 UnityBuild を有効にすると複数のソースコードを単一のファイルにまとめてコンパイルを行います。ビルド時間を大幅に短縮することができます。 UnityBuild を有効にすると複数のソースコードを単一のファイルにまとめてコンパイルを行います。ビルド時間を大幅に短縮することができます。
行 125: 行 126:
 他のファイルで #include されているかもしれないからです。 他のファイルで #include されているかもしれないからです。
 Unity Build が行われる単位は変化するので、以前はビルドが通っていても再ビルドしたらエラーが出ていて戸惑うこともあります。 Unity Build が行われる単位は変化するので、以前はビルドが通っていても再ビルドしたらエラーが出ていて戸惑うこともあります。
 +
 +Unity Build を無効化してビルドが通るかテストしたい場合は、ビルド時のコマンドラインオプションに -DisableUnity を指定します。
 +(VisualStudio から呼ばれている Build.bat のコマンドラインオプションに指定できます。)
 +
 +または BuildConfiguration.xml でも設定可能です。
 +
 +
  
  
行 133: 行 141:
  
  
 +=== UnityBuild の各種設定 ===
 +
 +UnityBuild はビルド時間を短縮しますが、ビルドするソースコードが肥大しメモリ消費が増えます。
 +特にマルチコア・マルチスレッド CPU で並列ビルドを行う場合はメモリがあふれる可能性があります。
 +
 +コマンドラインオプションではなく、BuildConfigration.xml で無効化したい場合は bUseUnityBuild を使います。
 +
 +また、Unity 化する場合のソースコードのサイズ制限の目安を NumIncludedBytesPerUnityCPP (byte数) で指定できます。デフォルトは 384KB (393216) です。
 +RAM 容量が少なくメモリ不足が発生する場合はサイズを減らしてみてください。
 +
 +<code xml>
 +<?xml version='1.0' encoding='utf-8'?>
 +<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
 +    <BuildConfiguration>
 +        <bUseUnityBuild>true</bUseUnityBuild>
 +        <NumIncludedBytesPerUnityCPP>393216</NumIncludedBytesPerUnityCPP>
 +    </BuildConfiguration>
 +</Configuration>
 +</code>
 +
 +
 +
 +
 +
 +==== ビルド速度の調整 ====
 +
 +
 +=== ParallelExecutor のビルドスレッド数 ===
 +
 +ParallelExecutor はすべてのスレッドを使用するとは限りません。
 +最大速度でビルドを行いたい場合は BuildConfiguration.xml への設定が必要です。
 +
 +例えば物理コアが 6個である場合はデフォルトで 6スレッドでビルドが行われます。
 +HyperThreading の 12スレッド分すべて使ってビルドを行いたい場合は、下記のように倍率として 2.0 を設定します。
 +
 +<code xml>
 +<?xml version='1.0' encoding='utf-8'?>
 +<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
 + <ParallelExecutor>
 + <ProcessorCountMultiplier>2.0</ProcessorCountMultiplier>
 + </ParallelExecutor>
 +</Configuration>
 +</code>
 +
 +ただし RAM 容量が少ない場合は指定した数だけビルドを走らせることができません。
 +ParallelExecutor は RAM の空き容量によって最大スレッド数を制限しています。
 +
 +UnityBuild は非常にメモリを消費するので、RAM が少ない場合はむやみにビルドスレッド数を増やさないようにしてください。
 +SN-DBS や FASTBuild では RAM 容量に関係なくビルドスレッド数を増やすことができますが、増やしすぎるとスラッシングが発生しビルド速度が著しく低下します。
  
 +RAM が 32GB の場合は、最大でも 8~12 スレッド程度にとどめておくことをおすすめします。
  
  
行 148: 行 206:
  
  
-上記のように <nowiki>C++</nowki> のプリプロセッサの前に走るので、UHT が解析するコマンドにはブロックコメントや #if ~、define マクロが意味を持ちません。+上記のように <nowiki>C++</nowiki> のプリプロセッサの前に走るので、UHT が解析するコマンドにはブロックコメントや #if ~、define マクロが意味を持ちません。
 例えば下記の UFUNCTION() はどちらも <nowiki>C/C++</nowiki> 言語的にはコメントアウトされていますが UHT では有効になります。#if ~ #endif block でも同じです。 例えば下記の UFUNCTION() はどちらも <nowiki>C/C++</nowiki> 言語的にはコメントアウトされていますが UHT では有効になります。#if ~ #endif block でも同じです。
  
行 204: 行 262:
  
  
 +空の Engine/Build/InstalledBuild.txt ファイルを作っておくと InstalledBuild mode になります。
 +UAT が外部ツールをビルドするのを回避することができます。
  
  
行 223: 行 283:
  
   * USER_DIR = C:/Users/<USER>/   * USER_DIR = C:/Users/<USER>/
 +
 +Linux と macOS の場合は次の場所になります。
 +
 +  - $ENGINE_DIR/Engine/Saved/UnrealBuildTool/BuildConfiguration.xml
 +  - $HOME/.config/Unreal Engine/UnrealBuildTool/BuildConfiguration.xml
 +  - $HOME/Unreal Engine/UnrealBuildTool/BuildConfiguration.xml
 +
 +**BuildConfiguration.xml に定義可能なパラメータの詳細は $ENGINE_DIR/Engine/Saved/UnrealBuildTool/BuildConfiguration.Schema.xsd ファイルを見るとわかります。**
 +
  
  
行 272: 行 341:
 もちろん対応していない Compiler を使うと Engine のビルドではエラーが出ます。 もちろん対応していない Compiler を使うと Engine のビルドではエラーが出ます。
 特定の Module で clang が必要になった場合に、build.cs 内部で指定するのが本来の使い方だと思われます。 特定の Module で clang が必要になった場合に、build.cs 内部で指定するのが本来の使い方だと思われます。
 +
 +
 +==== Windows SDK の選択 ====
 +
 +<code xml>
 +<?xml version='1.0' encoding='utf-8'?>
 +<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
 + <WindowsPlatform>
 + <WindowsSdkVersion>10.0.18362.0</WindowsSdkVersion>
 + </WindowsPlatform>
 +</Configuration>
 +</code>
 +
 +
 +
 +
 +==== 有効な分散ビルドの指定 ====
 +
 +<code xml>
 +<?xml version='1.0' encoding='utf-8'?>
 +<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
 + <BuildConfiguration>
 + <bAllowXGE>false</bAllowXGE>
 + <bAllowSNDBS>false</bAllowSNDBS>
 + <bAllowFASTBuild>true</bAllowFASTBuild>
 + </BuildConfiguration>
 +</Configuration>
 +</code>
 +
 +
 +| bAllowXGE     | IncrediBuild   |
 +| bAllowSNDBS   | SN-DBS         |
 +| bAllowFASTBuild  | FASTBuild   |
 +
  
  
行 278: 行 381:
 ====== UnrealHeaderTool Build の回避方法 ====== ====== UnrealHeaderTool Build の回避方法 ======
  
- +Source Code 版 Engine を使用していると、UnrealBuildTool は本来不要なはずの UnrealHeaderTool を何度もビルドしてしまう場合があります。
-UnrealBuildTool は本来不要なはずの UnrealHeaderTool を何度もビルドしてしまう問題があります。+
  
   * Makefile.bin が存在しない   * Makefile.bin が存在しない
行 290: 行 392:
 UHT は <nowiki>C++</nowiki> で書かれているため VisualStudio が install されていないとエラーになります。 UHT は <nowiki>C++</nowiki> で書かれているため VisualStudio が install されていないとエラーになります。
  
-もちろん Windows 向けにビルドを行う場合は VisualStudio が必要なのですが、例えば Android 向けに出力したい場合は必ずしも必要ありません。 +Windows 向けにビルドを行う場合は VisualStudio が必要なのですが、他の Platform 向けに出力する場合はその限りではありません。 
-Android SDK (Android NDK) 自体に toolchain 一式が含まれているらです。+例えば Android の場合、Android SDK (Android NDK) 自体に toolchain 一式が含まれているので単独でビルドを行うことができます。 
 +実際に Binary 配布版 UE4 (おそく InstalledBuild 版も同じ) は VisualStudio がなくてもビルドすることができます。
  
  
- +Source Code 版 UE4 でも、UBT 実行時のコマンドラインオプション -NoBuildUHT または下記の設定によって UHT のリビルドを回避することができます。
-UBT 実行時のコマンドラインオプション -NoBuildUHT または下記の設定で、強制的に UHT のリビルドを回避することができます。+
  
 <code cpp> <code cpp>
行 307: 行 409:
  
  
 +例えばチームで開発作業を行っていると、プログラマのみ VisualStudio を所有しておりプランナーやグラフィックデザイナーは VisualStudio を持っていない場合があります。
 +生成した Windows 向けの *.exe はもちろん共有が必要ですが、上記の方法を使えば各種実機(Android,他コンソール)向けに出力する場合、各自でビルドを行うことができます。
  
-例えばチームで開発作業を行っていて、プログラマのみ VisualStudio を所有しておりプランナーやグラフィックデザイナーは VisualStudio を持っていない場合があります。 +使用方法の
-生成した Windows 向けの *.exe はもちろん共有が必要ですが、上記の方法を使えば各種実機(Android,他コンソールなど)に出力する場合ビルドを各自に任せることができます。+
  
-方法 +  - Target 向けのバイナリを直接作っておきます。
- +
-  - Target 向けのバイナリを直接作ます。+
     * UnrealBuildTool.exe  MyProject  Android  Development  -Project="<フルパス>/MyProject/MyProject.uproject"  -WaitMutex  -NoBuildUHT     * UnrealBuildTool.exe  MyProject  Android  Development  -Project="<フルパス>/MyProject/MyProject.uproject"  -WaitMutex  -NoBuildUHT
-  - UE4Editor 上で ProjectLauncher を使います+  - ビルドします。 
 + 
 +  * UE4Editor 上から実機起動する場合 
 +    - プレイボタンのサブメニューから、リストに並んでいる Android Device を選びます。 
 +    * エラーが出る場合は次の ProjectLauncher を使う方法を試してください。 
 + 
 +  * UE4Editor 上で ProjectLauncher を使う場合
     - カスタム起動プロファイルに [+] ボタンで新規追加     - カスタム起動プロファイルに [+] ボタンで新規追加
     - 「ビルド」の項目を "ビルドしない" に変更     - 「ビルド」の項目を "ビルドしない" に変更
行 321: 行 428:
       - クックしたプラットフォームを "Android_ASTC" に変更 (または適切なもの)       - クックしたプラットフォームを "Android_ASTC" に変更 (または適切なもの)
     - 「パッケージ」を "ローカル環境にパッケージ化および格納"     - 「パッケージ」を "ローカル環境にパッケージ化および格納"
 +      * パッケージ化が不要なら "パッケージ化しないでください"
     - 「デプロイ」を "デプロイしないでください"     - 「デプロイ」を "デプロイしないでください"
 +      * パッケージ化ではなく起動したい場合は "デバイスにコピー" に変更します。
     - 右上の矢印で戻る     - 右上の矢印で戻る
-  - 今追加したカスタム起動プロファイルの右端にある起動 ("このプロファイルを起動する") ボタンを押してビルド開始+    - 今追加したカスタム起動プロファイルの右端にある起動 ("このプロファイルを起動する") ボタンを押してビルド開始
  
  
ue4/buildsystem.1598101441.txt.gz · 最終更新: 2020/08/22 22:04 by oga