本文内容
Open 3D Engine中的构建故障排除
本指南将帮助您识别并解决在Open 3D Engine (O3DE) 构建系统中可能遇到的一些常见问题。 请注意,您可能会遇到与您的项目或联编无关的情况。本参考资料仅针对最常见的构建问题,这些问题不会受到已知错误的影响,也不容易解决。如果您在这里找不到您的问题,请尝试搜索 我们的论坛 或在 O3DE Discord 中询问。
如果您认为您的构建问题是由于 O3DE 中的错误造成的,请检查 现有错误报告 和 提交问题 ,如果可以的话!
查找错误日志或内存转储?有关位置,请参阅 Open 3D Engine日志文件。
生成文件的C2027错误
问题: MSVC
C2027 编译器错误 是由于尝试编译引用缺失类型的文件造成的。这个问题通常是由代码生成工具创建的空文件引起的,最常见的情况是在构建
AzQtFramework
库时创建的空文件所致。
补救措施:
确保有足够的磁盘空间来构建所选目标。如果没有足够的磁盘空间来写入文件,代码生成器将生成空文件。
删除包含 CMake 缓存信息的目录。
从构建文件夹中删除包含自动生成源代码的文件夹。执行以下操作之一:
确保有足够的磁盘空间来构建所选目标。如果磁盘空间不足,代码生成器将生成空文件。
删除包含 CMake 缓存信息的目录。
从构建文件夹中删除包含自动生成源代码的文件夹。执行以下操作之一:
- 删除构建目录中所有名称中包含
_autogen
的文件夹。 - 删除 CMake 配置和生成时使用的构建目录,然后重新配置并重新生成。
- 删除构建目录中所有名称中包含
CMake 在配置过程中搜索错误的 MSVC
问题: CMake 工具报告缺少 MSVC 编译器。这会产生类似以下的警告:
CMake Error at CMakeLists.txt:15 (project):
The CMAKE_C_COMPILER:
C:/Program Files (x86)/Microsoft Visual Studio/2019/Professional/VC/Tools/MSVC/14.24.28314/bin/Hostx64/x64/cl.exe
is not a full path to an existing compiler tool.
当 Visual Studio 更新或修改时,CMake 缓存中的信息指向之前安装的编译器时,就会出现这种情况。
补救措施: 这个问题最常见于 Visual Studio 更新后,O3DE 项目文件没有再生。
CMake 系统在配置时使用 CMAKE_C_COMPILER
和 CMAKE_CXX_COMPILER
值设置 C 和 C++ 编译器的路径。
这些值保存在 CMake 缓存中。清除缓存并重新配置,方法如下:
- 删除 CMake 生成目录中的
CMakeCache.txt
文件。 - 完全删除 CMake 生成目录。
清理缓存后,在 CMake 配置阶段应能检测到正确的编译器。
CMake查找Findo3de.cmake
失败
问题: CMake 工具报告找不到由 “o3de ”提供的软件包配置文件。由此产生的警告类似于:
CMake Error at CMakeLists.txt:10 (find_package):
By not providing "Findo3de.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "o3de", but
CMake did not find one.
Could not find a package configuration file provided by "o3de" with any of
the following names:
o3deConfig.cmake
o3de-config.cmake
补救措施: 此问题通常是由配置错误的 o3de_manifest.json
文件引起的,该文件有一个已不存在的 O3DE 版本的条目,或者有丢失或损坏的文件。 如果您安装了 O3DE,然后删除了引擎文件夹,而不是使用 “添加或删除程序 ”卸载,就会出现这种情况。 请执行以下操作:
- 关闭已打开的项目管理器 (
o3de.exe
)。 - 在文本编辑器中打开
<user>/.o3de/o3de_manifest.json
。 - 删除"engines" 和 “engines_path” 列表中已删除或路径已不存在的引擎条目。
- 确保"engines" 和 “engines_path"中的最后一行不以逗号结束。
- 保存并关闭文件。
- 重启项目管理器 (
o3de.exe
)。 - 如果在
Projects
页面没有看到您的项目,请重新添加。
当 Project Manager 打开时,它会自动重新注册 O3DE 引擎,并用正确的信息更新 o3de_manifest.json
。
软件包目录检测失败
问题: 在配置过程中,软件包目录检测不正确,CMake 配置任务会报告类似以下的错误:
cmake -B build/windows -S . -G "Visual Studio 16" -DLY_3RDPARTY_PATH="C:\o3de\3rdParty\"
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.17763.
-- Using Windows target SDK 10.0.18362.0
CMake Error at cmake/3rdParty.cmake:19 (file):
file FILE([TO_CMAKE_PATH|TO_NATIVE_PATH] path result) must be called with
exactly three arguments.
Call Stack (most recent call first):
CMakeLists.txt:43 (include)CMake Error at cmake/3rdParty.cmake:21 (if):
if given arguments: "NOT" "EXISTS" "C:/o3de/3rdParty\" Unknown arguments specified
Call Stack (most recent call first):
CMakeLists.txt:43 (include)-- Configuring incomplete, errors occurred!
**在 Windows 系统中,当传递给 CMake 的 LY_3RDPARTY_PATH
值以 \
字符结尾时,就会出现此问题。请执行以下操作之一:
- 更改数值,删除尾部的
/
。 - 更改
LY_3RDPARTY_PATH
的格式,使用与平台无关的/
路径分隔符。
##构建时间长
问题: 构建时间比预期的要长。
补救措施: 有几个步骤可以解决构建时间过长的问题。
- 使用可测量耗时的构建命令,以便在排除故障时比较构建时间。 在 Windows 上可以使用 PowerShell
measure-command
来测量构建时间,在 Linux 上可以使用time
。measure-command { cmake --build build/windows --target Editor AutomatedTesting.GameLauncher --config profile | Out-Default}
time cmake --build build/linux --target Editor AutomatedTesting.GameLauncher --config profile
- 确保只构建正在使用的目标。 例如,选择适当的目标(如
Editor
)进行编译,而不是选择ALL_BUILD
目标,因为后者会编译所有内容,耗时更长。 请记住,第一次编译将花费最长的时间,因为必须编译所选目标和依赖项的所有代码,但随后的编译应该会快很多(几分钟或几秒钟),尤其是在编写游戏代码时。 - 在开发过程中,如果不需要
debug
编译配置中所有未优化的调试信息,请使用profile
编译配置。 - 通过配置选项
-DLY_UNITY_BUILD=ON
,确保使用 unity 联编(默认开启)。 - 使用选项
-DLY_DISABLE_TEST_MODULES=ON
进行配置后,如果不对引擎进行修改,就不要构建单元测试。 - 使用 O3DE CLI 或项目管理器 停用项目不需要的Gem。
- 请参阅下面的 配置编译器特定设置的故障排除步骤,在 CPU 核心数量较多的硬件上,这可能是必要的。
编译导致计算机冻结、锁定或重启
问题: 在某些计算机上,尤其是CPU内核数较多的计算机上,跨内核编译的方式可能导致资源匮乏,甚至冻结。 此外,编译过程中也可能出现内存不足的情况,导致资源短缺和重启等问题。
补救措施: 可能的话,调整构建设置,分散每个项目允许使用的最大并行进程数和最大 CL 处理器数。
对于 Windows 上的 Visual Studio,命令可能如下所示:将最大 CPU 数量设置为 16,并将每个项目的 CL 处理器数量限制为 32。
cmake --build build/windows --target Editor --config profile -- /m:16 /p:CL_MPCount=32
如果在 Visual Studio IDE 中构建或调试,请在 “工具”->“选项”->“项目和解决方案”->“构建和运行 ”选项页面设置并行项目构建的最大次数:
在 “工具”->“选项”->“项目和解决方案”->“VC++ 项目设置 ”选项页面设置最大并发 C++ 编译次数:
尝试使用不同的值,以找到最适合您硬件的设置。 在 Windows 系统中,您可以在 PowerShell 终端中使用以下命令测量不同设置下的编译时间:
measure-command { cmake --build build/windows --target Editor --config profile -- /m:8 /p:CL_MPCount=8 | Out-Default}
示例输出:
Days : 0
Hours : 0
Minutes : 15
Seconds : 56
Milliseconds : 701
Ticks : 9567014354
TotalDays : 0.0110729332800926
TotalHours : 0.265750398722222
TotalMinutes : 15.9450239233333
TotalSeconds : 956.7014354
TotalMilliseconds : 956701.4354
使用
-j
或 --parallel
cmake 选项 来限制构建时使用的并行作业数量。
例如,在一台 12 核 32 GB 的机器上,如果编译进程被杀死,则可能需要将并行编译作业的数量减少到 6 个。
cmake --build <build-dir> -j 6 --config profile --target MyProject.GameLauncher -- <generator specific options>