本文档解释了 Godot 的构建系统,该系统使用 SCons 作为基础,并辅以自定义 Python 脚本来处理特定于平台的编译、模块集成和资源生成。有关为 Godot 贡献、设置开发环境或为特定平台编译的信息,请参阅官方文档。
Godot 的构建系统旨在从单一代码库为多个平台编译引擎及其模块。它可以生成不同的构建目标(编辑器、调试模板、发布模板),并支持广泛的配置和优化。构建系统还负责生成引擎使用的各种资源和代码文件。
来源: SConstruct1-717 methods.py1-219 platform_methods.py1-162
构建系统的主要入口点是存储库根目录下的 SConstruct 文件。该文件
来源: SConstruct1-57 SConstruct102-145 SConstruct183-268 SConstruct357-394 SConstruct427-501
此文件包含在整个构建过程中使用的辅助函数。关键函数包括
add_source_files:将源文件添加到构建目标detect_modules:检测指定路径中的可用模块CommandNoCache:创建一个不使用 SCons 缓存的命令get_version_info:获取构建的版本信息detect_compiler_version:检测编译器版本module_check_dependencies:检查模块依赖项是否满足这些函数简化了构建脚本,并提供了构建系统中跨使用的通用功能。
来源: methods.py33-83 methods.py234-294 methods.py332-356 methods.py138-159 methods.py651-770
每个支持的平台在其平台目录中都有一个 detect.py 文件。这些文件提供了关于以下方面的信息
平台检测系统允许 Godot 使用相同的代码库在多个平台上进行构建和针对多个平台构建。
来源: platform/windows/detect.py18-172 platform/linuxbsd/detect.py12-72 platform/macos/detect.py12-67 platform/android/detect.py14-41 platform/ios/detect.py15-59 platform/web/detect.py15-90
检测完平台后,构建系统会使用特定于平台的设置配置环境。每个平台的 detect.py 文件都有一个 configure 函数,该函数会设置构建所需的编译器、链接器和其他工具。
在 Windows 上,构建系统可以使用 MSVC(Visual Studio)或 MinGW(GCC)工具链。它会配置
来源: platform/windows/detect.py286-564 platform/windows/detect.py636-747
在 Linux 和 BSD 系统上,构建系统会配置
来源: platform/linuxbsd/detect.py74-474
对于 macOS,构建系统会配置
来源: platform/macos/detect.py68-262
Android 构建使用以下内容配置
来源: platform/android/detect.py100-246
iOS 构建使用以下内容配置
来源: platform/ios/detect.py61-184
使用Emscripten的Web构建配置为
来源: platform/web/detect.py100-306
Godot 的构建系统包含一个模块系统,允许通过附加功能来扩展引擎。模块可以是内置的(包含在 Godot 仓库中)或自定义的(独立于仓库)。
来源: methods.py234-294 methods.py297-304 modules/SCsub15-79
模块在 modules 目录以及通过 custom_modules 选项指定的任何自定义路径中进行检测。模块必须包含
register_types.h 文件:声明模块初始化和反初始化函数SCsub 文件:定义如何构建模块config.py 文件:包含模块配置选项和依赖项检查来源: methods.py234-294 methods.py297-304 modules/SCsub15-79
每个模块的 config.py 文件可以定义
构建系统会处理这些配置,并根据其依赖项和用户选项来启用或禁用模块。
来源: SConstruct402-430 methods.py319-356 SConstruct373-393
构建系统会生成一个 register_module_types.gen.cpp 文件,该文件包含所有启用的模块,并调用它们的初始化和反初始化函数。这使得模块可以在运行时集成到引擎中。
Godot 的构建系统支持三个主要的构建目标
构建目标通过 target 选项指定,它会影响各种构建设置,包括优化、调试符号和包含的功能。
来源: SConstruct161-162 SConstruct474-503
构建系统支持各种配置,这些配置可以与构建目标结合使用
这些配置允许针对不同用例对构建进行精细调整。
除了编译源代码之外,构建系统还生成引擎使用的各种资产和代码文件
这些生成的资产会包含在构建中,并提供引擎运行时所需的资源。
来源: editor/icons/SCsub1-24 editor/editor_builders.py12-96 gles3_builders.py8-103 glsl_builders.py8-96 main/main_builders.py6-42 core/core_builders.py9-28
构建系统提供了多种命令行选项来自定义构建。一些关键选项包括
| 选项 | 描述 | 默认 |
|---|---|---|
platform | 目标平台 (windows, linuxbsd, macos, android, ios, web) | 自动检测 |
target | 编译目标 (editor, template_release, template_debug) | editor |
arch | CPU 架构 (x86_32, x86_64, arm32, arm64 等) | 自动检测 |
optimize | 优化级别 (none, debug, speed, size) | 基于 target |
debug_symbols | 包含调试符号 | 取决于 target |
use_llvm | 使用 LLVM/Clang 编译器 | false |
use_lto | 使用链接时优化 | none |
tools | 包含编辑器功能 | true |
tests | 包含测试 | false |
custom_modules | 自定义模块的路径 | "" |
Godot 的构建系统支持单编译单元 (SCU) 构建,它将多个源文件合并到一个编译单元中以提高构建时间。这由 scu_build 选项控制。
来源: methods.py23-83 SConstruct616-627
整体构建流程遵循以下步骤
构建 Godot 的典型过程是
bin/ 目录中例如,使用 MSVC 为 Windows 构建编辑器
或为 Android 构建发布模板
来源: SConstruct633
构建系统支持跨平台编译
交叉编译需要针对目标平台的额外设置和依赖项。
来源: platform/windows/detect.py47-59 platform/macos/detect.py76-137 platform/ios/detect.py85-137 platform/android/detect.py112-176
Godot 的构建系统是一个基于 SCons 的复杂设置,它处理了构建跨平台游戏引擎的复杂性,支持多种配置和目标。它提供了一种灵活而强大的方式来定制构建过程,同时保持跨多种平台和体系结构的兼容性。