为 X11 平台编译(Linux、*BSD 操作系统)

参见

这个页面描述的是如何从源码编译 Linux 编辑器和导出模板二进制文件。如果你要找的是导出项目到 Linux,请阅读 为 Linux 导出

需求

要在Linux或其他类Unix系统下进行编译, 需要满足以下条件:

  • GCC 7+ 或 Clang 6+.

  • Python 3.5+.

  • SCons 3.0+ 构建系统. 如果你的发行版默认使用Python 2, 或者你使用的是SCons 3.1.2之前的版本, 你需要通过修改SCons脚本文件的shebang (第一行)来改变SCons使用的Python版本, 改为 #!/usr/bin/python3. 使用命令``which scons``来找到SCons脚本文件的位置.

  • pkg-config(用于检测下面这些依赖库)。

  • X11、Xcursor、Xinerama、Xi、XRandR 开发库。

  • MesaGL 开发库。

  • ALSA 开发库。

  • PulseAudio 开发库。

  • 可选——libudev(使用 udev = yes 构建)。

  • 可选——yasm(用于 WebM SIMD 优化)。

参见

要获取编译所需的 Godot 源码,请参阅 获取源代码

有关 Godot 的 SCons 用法的一般概述,请参阅 构建系统介绍

针对各个发行版的单行命令

Alpine Linux

apk add scons pkgconf gcc g++ libx11-dev libxcursor-dev libxinerama-dev libxi-dev libxrandr-dev \
    libexecinfo-dev

Arch Linux

pacman -S --needed scons pkgconf gcc libxcursor libxinerama libxi libxrandr mesa glu libglvnd \
    alsa-lib pulseaudio yasm

Debian / Ubuntu

sudo apt-get install build-essential scons pkg-config libx11-dev libxcursor-dev libxinerama-dev \
    libgl1-mesa-dev libglu-dev libasound2-dev libpulse-dev libudev-dev libxi-dev libxrandr-dev yasm

Fedora

sudo dnf install scons pkgconfig libX11-devel libXcursor-devel libXrandr-devel libXinerama-devel \
    libXi-devel mesa-libGL-devel mesa-libGLU-devel alsa-lib-devel pulseaudio-libs-devel \
    libudev-devel yasm gcc-c++ libstdc++-static libatomic-static

FreeBSD

sudo pkg install py37-scons pkgconf xorg-libraries libXcursor libXrandr libXi xorgproto libGLU \
    alsa-lib pulseaudio yasm

Gentoo

emerge -an dev-util/scons x11-libs/libX11 x11-libs/libXcursor x11-libs/libXinerama x11-libs/libXi \
    media-libs/mesa media-libs/glu media-libs/alsa-lib media-sound/pulseaudio dev-lang/yasm

Mageia

urpmi scons task-c++-devel pkgconfig "pkgconfig(alsa)" "pkgconfig(glu)" "pkgconfig(libpulse)" \
    "pkgconfig(udev)" "pkgconfig(x11)" "pkgconfig(xcursor)" "pkgconfig(xinerama)" "pkgconfig(xi)" \
    "pkgconfig(xrandr)" yasm

OpenBSD

pkg_add python scons llvm yasm

openSUSE

sudo zypper install scons pkgconfig libX11-devel libXcursor-devel libXrandr-devel libXinerama-devel \
        libXi-devel Mesa-libGL-devel alsa-devel libpulse-devel libudev-devel libGLU1 yasm

NetBSD

pkg_add pkg-config py37-scons yasm

对于音频支持,你可以选择安装 pulseaudio

Solus

sudo eopkg install -c system.devel scons libxcursor-devel libxinerama-devel libxi-devel \
    libxrandr-devel mesalib-devel libglu alsa-lib-devel pulseaudio-devel yasm

编译

启动终端,然后进入引擎源代码的根目录,输入:

scons -j8 platform=x11

-j (jobs)标志的一个好的经验法则是, 编译Godot的线程至少要与CPU中具有内核的线程数量一样多, 甚至不多于一个或两个. 随意将 -j 选项添加到下面显示的任何SCons命令中.

如果一切顺利, 生成的二进制可执行文件将放在 `` bin`` 子目录中. 该可执行文件包含整个引擎, 并且运行时无需任何依赖项. 执行它将会启动项目管理器.

备注

如果你希望使用 Clang 而不是 GCC 编译器, 可以使用这个命令:

scons platform=x11 use_llvm=yes

使用Clang似乎是OpenBSD的要求, 否则字体将无法生成.

备注

如果您正在编译Godot用于生产用途, 那么您可以通过添加SCons选项 target=release_debug 来使最终的可执行文件更小更快.

如果你用GCC编译Godot, 你可以通过添加SCons选项 use_lto=yes 来使可执行文件更小更快. 由于链接时优化是一个内存密集的过程, 在编译时需要大约7GB的可用内存.

备注

如果你想为自己的 Godot 构建和官方发布使用单独的编辑器设置,你可以通过在 bin/ 文件夹中创建一个名为 ._sc__sc_ 的文件来启用 自包含模式

编译无头/服务器构建

要编译无头构建,支持编辑器的自动化导出项目功能,请使用:

scons -j8 platform=server tools=yes target=release_debug

如果要编译调试版本的服务器,支持远程调试工具,那么请使用:

scons -j8 platform=server tools=no target=release_debug

要编译一个经过优化以运行专用游戏的服务器版本,请使用以下构建选项:

scons -j8 platform=server tools=no target=release

构建导出模板

警告

Linux二进制文件通常不会在早于其构建版本的发行版上运行. 如果您希望分发适用于大多数发行版的二进制文件, 则应在较旧的发行版(例如Ubuntu 16.04)上构建它们. 您可以使用虚拟机或容器来设置合适的构建环境.

要构建X11(Linux, *BSD)导出模板, 请使用以下参数运行构建系统:

  • (32 位)

scons platform=x11 tools=no target=release bits=32
scons platform=x11 tools=no target=release_debug bits=32
  • (64 位)

scons platform=x11 tools=no target=release bits=64
scons platform=x11 tools=no target=release_debug bits=64

请注意, 与您的主机平台相反的位(64/32)交叉编译并不总是直接的, 并且可能需要chroot环境.

要创建标准导出模板, 必须将生成的文件复制到:

$HOME/.local/share/godot/templates/[gd-version]/

并以此命名(即使对于*BSD, 它也被Godot视为" Linux X11"):

linux_x11_32_debug
linux_x11_32_release
linux_x11_64_debug
linux_x11_64_release

此外, 如果要编写自定义模块或自定义C ++代码, 则可能需要在此处将二进制文件配置为自定义导出模板:

../../_images/lintemplates.png

您甚至不需要复制它们, 只需引用在Godot源文件夹的 bin/ 目录中生成的文件, 因此下次构建时, 将自动引用自定义模板.

使用 Clang 和 LLD 可以加快开发速度

你也可以使用Clang和LD来构建Godot. 与默认的GCC + GNU ld设置相比, 这有两个好处:

  • 与GNU ld或gold相比,LD链接Godot的速度明显更快. 这导致更快的迭代时间.

  • 与GCC相比,Clang倾向于给出更多有用的错误信息.

为此,请从分发的包管理器中安装 Clang 和 lld 包,然后使用以下 SCons 命令:

scons platform=x11 use_llvm=yes use_lld=yes

构建完成后,将在 bin/ 文件夹中创建一个以 .llvm 为后缀的新的二进制文件。

仍然建议使用GCC进行生产构建, 因为它们可以使用链接时间优化进行编译, 使产生的二进制文件更小, 更快.

使用 Pyston 加快开发速度

你可以使用 Pyston 来运行 SCons。Pyston 是一种利用了 JIT 的 Python 语言实现(SCons 就是使用 Python 编写的)。目前它只兼容 Linux。Pyston 可以显著加速增量构建,经常可以达到 1.5× 和 2× 倍。可以将 Pyston 与 Clang 和 LLD 组合,进行更快的构建。

  • Download the latest portable Pyston release.

  • 将绿色的 .tar.gz 解压到特定的位置,比如 $HOME/.local/opt/pyston/(必要时请创建文件夹)。

  • 在命令行中,使用 cd 达到 Pyston 解压出的文件夹,然后运行 ./pyston -m pip install scons,在 Pyston 中安装 SCons。

  • 为了便于通过 Pyston 运行 SCons,请创建一个指向其封装脚本的符号链接,符号链接的位置必须在你的 PATH 环境变量中:

    ln -s ~/.local/opt/pyston/bin/scons ~/.local/bin/pyston-scons
    
  • 现在就不是执行 scons <构建参数> 了,要编译 Godot 请执行 pyston-scons <构建参数>

如果创建符号链接后无法执行 pyston-scons,请确定 $HOME/.local/bin/ 是当前用户的 PATH 环境变量的一部分。