当前位置: 首页 > 工具软件 > o3de > 使用案例 >

O3DE的构建方法

弘浩博
2023-12-01

O3DE是一款具备实时渲染能力的3D引擎,由Linux基金会管理,项目主页见链接,项目源码托管在github
O3DE目前支持多个平台,如下:

  • Windows,基于DX12和Vulkan。
  • MacOS,基于Metal和Vulkan。
  • Linux,基于Vulkan。
  • Android,基于Vulkan。
  • iOS,基于Metal和Vulkan。

本文介绍构建方法。

下载代码

代码仓库中使用lfs来管理二进制文件,因此安装git时需要注意是否同步安装了lfs。

检查并初始化git lfs

git lfs --version
git lfs install

下载源码。

git clone https://github.com/o3de/o3de.git

准备构建工具

  • Visual Studio 2019或者Visual Studio 2022,下载链接,个人开发者学习用途推荐安装社区版本,同时建议使用最新版本。注意安装如下组件(以Visual Studio 2019为例):
    • Game Development with C++
    • MSVC v142 - VS 2019 C++ x64/x86
    • C++ 2019 redistributable update
  • CMake,最低版本支持3.22.0,下载链接,可以选择安装包或者绿色包,注意安装路径或者解压中要避免中文、空格等字符。
  • Ninja,推荐使用1.10.0以上的版本,下载链接

进入项目路径

假设o3de的源码下载至C:\o3de\,在Windows平台的CMD可执行如下命令。

cd C:\o3de\

后续操作,如无特别说明,均在源码路径下。

配置项目

在CMD中执行如下命令:

cmake -B C:\o3de\build\windows ^
    -S C:\o3de ^
    -G "Visual Studio 16" ^
    -DLY_UNITY_BUILD=ON ^
    -DCMAKE_SYSTEM_VERSION=10.0 ^
    -DLY_DISABLE_TEST_MODULES=ON ^
    -DLY_3RDPARTY_PATH=C:\o3de-packages

执行本命令时,构建脚本会自动下载构建时依赖的其它开源软件,同时安装Python的三方软件,因此需要保持网络畅通。
假如执行命令过程中由于网络原因导致失败,则可以反复尝试几次。

部分选项的说明:

  • LY_UNITY_BUILD,指定为ON或者TRUE,即开启CMake提供的Unity Build特性。
    • 对于版本构建,有助于缩短整体的构建时间。
    • 对于开发者日常工作,则容易出现头文件缺失,编译时等待时间长的问题。
  • LY_DISABLE_TEST_MODULES,指定为ON或者TRUE,即不生成UT代码的工程。
    • 版本构建时非常有意义,避免编译多余的代码。
    • 开发人员本地使用时,不建议开启,因为没有UT代码的工程,无法在本地开发、编译、执行UT用例。
    • 流水线在提交门禁中集成UT代码的编译和支行,有助于及时发现问题。

注册路径

在CMD中执行如下命令:

call .\scripts\o3de.bat register --this-engine

启动编译

在CMD中执行如下命令:

cmake --build C:\o3de\build\windows --target Editor AssetProcessor --config profile -- /m

按照CMake的文档,--后的选型将直接传递给平台自身的构建系统,以前述配置,即MSBuild,官方指导的链接
依据官方文档,可知/m选项用于控制构建时的并发度,按照1C2G的经验值,结合CPU和内存的数量来评估具体的参数值。
考虑到O3DE项目的源码量比较大,在百万级别,因此在构建时注意不要把CPU或者内存占满:

  • 比如机器配置为8C32G,则推荐取值为6,即/m:6
  • 比如机器配置为8C8G,则推荐取值为6,即/m:3

同样可以使用Visual Studio的IDE来构建。在C:\o3de\build\windows下可以找到O3DE.sln,使用Visual Studio打开,找到Editor,指定为启动项目,然后即可开始编译。

在构建过程中,机器的CPU、内存、硬盘都被编译器占满,此时视机器的性能,安心等待1小时左右。假如机器配置低的话,构建时间会相应延长。

另外O3DE项目允许开发者使用Clang来完成构建,操作文档见链接

 类似资料: