Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Compiling for Linux, *BSD¶
参见
这个页面描述的是如何从源码编译 Linux 编辑器和导出模板二进制文件。如果你要找的是导出项目到 Linux,请阅读 为 Linux 导出。
需求¶
要在Linux或其他类Unix系统下进行编译, 需要满足以下条件:
GCC 7+ 或 Clang 6+.
SCons 3.0+ 构建系统.
备注
If your distribution uses Python 2 by default, or you are using a version of SCons prior to 3.1.2, you will need to change the version of Python that SCons uses by changing the shebang (the first line) of the SCons script file to
#! /usr/bin/python3
. Use the commandwhich scons
to find the location of the SCons script file.pkg-config (used to detect the development libraries listed below).
Development libraries:
X11, Xcursor, Xinerama, Xi and XRandR.
MesaGL.
ALSA.
PulseAudio.
可选——libudev(使用
udev = yes
构建)。
针对各个发行版的单行命令¶
apk add \
scons \
pkgconf \
gcc \
g++ \
libx11-dev \
libxcursor-dev \
libxinerama-dev \
libxi-dev \
libxrandr-dev \
mesa-dev \
libexecinfo-dev \
eudev-dev \
alsa-lib-dev \
pulseaudio-dev
pacman -S --needed \
scons \
pkgconf \
gcc \
libxcursor \
libxinerama \
libxi \
libxrandr \
mesa \
glu \
libglvnd \
alsa-lib \
pulseaudio
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
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 \
gcc-c++ \
libstdc++-static \
libatomic-static
pkg install \
py37-scons \
pkgconf \
xorg-libraries \
libXcursor \
libXrandr \
libXi \
xorgproto libGLU \
alsa-lib \
pulseaudio
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
urpmi \
scons \
task-c++-devel \
pkgconfig \
"pkgconfig(alsa)" \
"pkgconfig(glu)" \
"pkgconfig(libpulse)" \
"pkgconfig(udev)" \
"pkgconfig(x11)" \
"pkgconfig(xcursor)" \
"pkgconfig(xinerama)" \
"pkgconfig(xi)" \
"pkgconfig(xrandr)"
pkg_add \
python \
scons \
llvm
zypper install \
scons \
pkgconfig \
libX11-devel \
libXcursor-devel \
libXrandr-devel \
libXinerama-devel \
libXi-devel \
Mesa-libGL-devel \
alsa-devel \
libpulse-devel \
libudev-devel \
gcc-c++ \
libGLU1
pkg_add \
pkg-config \
py37-scons
提示
对于音频支持,你可以选择安装 pulseaudio
。
eopkg install -c \
system.devel \
scons \
libxcursor-devel \
libxinerama-devel \
libxi-devel \
libxrandr-devel \
mesalib-devel \
libglu \
alsa-lib-devel \
pulseaudio-devel
编译¶
启动终端,然后进入引擎源代码的根目录,输入:
scons platform=linuxbsd
备注
Prior to Godot 4.0, the Linux/*BSD target was called x11
instead of
linuxbsd
. If you are looking to compile Godot 3.x, make sure to use the
3.x branch of this documentation.
If all goes well, the resulting binary executable will be placed in the "bin" subdirectory. This executable file contains the whole engine and runs without any dependencies. Executing it will bring up the Project Manager.
备注
如果你希望使用 Clang 而不是 GCC 编译器, 可以使用这个命令:
scons platform=linuxbsd use_llvm=yes
使用Clang似乎是OpenBSD的要求, 否则字体将无法生成.
备注
If you are compiling Godot for production use, then you can
make the final executable smaller and faster by adding the
SCons options target=template_release production=yes
.
If you are compiling Godot with GCC, you can make the binary
even smaller and faster by adding the SCons option lto=full
.
As link-time optimization is a memory-intensive process,
this will require about 7 GB of available RAM while compiling.
备注
如果你想为自己的 Godot 构建和官方发布使用单独的编辑器设置,你可以通过在 bin/
文件夹中创建一个名为 ._sc_
或 _sc_
的文件来启用 自包含模式。
Running a headless/server build¶
To run in headless mode which provides editor functionality to export projects in an automated manner, use the normal build:
scons platform=linuxbsd target=editor
And then use the --headless
command line argument:
./bin/godot.linuxbsd.editor.x86_64 --headless
如果要编译调试版本的服务器,支持远程调试工具,那么请使用:
scons platform=linuxbsd target=template_debug
要编译一个经过优化以运行专用游戏的服务器版本,请使用以下构建选项:
scons platform=linuxbsd target=template_release production=yes
构建导出模板¶
警告
Linux二进制文件通常不会在早于其构建版本的发行版上运行. 如果您希望分发适用于大多数发行版的二进制文件, 则应在较旧的发行版(例如Ubuntu 16.04)上构建它们. 您可以使用虚拟机或容器来设置合适的构建环境.
To build Linux or *BSD export templates, run the build system with the following parameters:
(32 位)
scons platform=linuxbsd target=template_release arch=x86_32
scons platform=linuxbsd target=template_debug arch=x86_32
(64 位)
scons platform=linuxbsd target=template_release arch=x86_64
scons platform=linuxbsd target=template_debug arch=x86_64
请注意, 与您的主机平台相反的位(64/32)交叉编译并不总是直接的, 并且可能需要chroot环境.
To create standard export templates, the resulting files in the bin/
folder
must be copied to:
$HOME/.local/share/godot/export_templates/<version>/
and named like this (even for *BSD which is seen as "Linux/X11" by Godot):
linux_x11_32_debug
linux_x11_32_release
linux_x11_64_debug
linux_x11_64_release
此外, 如果要编写自定义模块或自定义C ++代码, 则可能需要在此处将二进制文件配置为自定义导出模板:
您甚至不需要复制它们, 只需引用在Godot源文件夹的 bin/
目录中生成的文件, 因此下次构建时, 将自动引用自定义模板.
使用 Clang 和 LLD 可以加快开发速度¶
你也可以使用Clang和LD来构建Godot. 与默认的GCC + GNU ld设置相比, 这有两个好处:
与GNU ld或gold相比,LD链接Godot的速度明显更快. 这导致更快的迭代时间.
与GCC相比,Clang倾向于给出更多有用的错误信息.
为此,请从分发的包管理器中安装 Clang 和 lld
包,然后使用以下 SCons 命令:
scons platform=linuxbsd use_llvm=yes linker=lld
构建完成后,将在 bin/
文件夹中创建一个以 .llvm
为后缀的新的二进制文件。
仍然建议使用GCC进行生产构建, 因为它们可以使用链接时间优化进行编译, 使产生的二进制文件更小, 更快.
If this error occurs:
/usr/bin/ld: cannot find -l:libatomic.a: No such file or directory
There are two solutions:
In your SCons command, add the parameter
use_static_cpp=no
.Follow these instructions to configure, build, and install
libatomic_ops
. Then, copy/usr/lib/libatomic_ops.a
to/usr/lib/libatomic.a
.
Using mold for faster development¶
For even faster linking compared to LLD, you can use mold. mold can be used with either GCC or Clang.
As of January 2023, mold is not readily available in Linux distribution repositories, so you will have to install its binaries manually.
Download mold binaries from its releases page.
Extract the
.tar.gz
file, then move the extraced folder to a location such as.local/share/mold
.Add
$HOME/.local/share/mold/bin
to your user'sPATH
environment variable. For example, you can add the following line at the end of your$HOME/.bash_profile
file:
PATH="$HOME/.local/share/mold/bin:$PATH"
Open a new terminal (or run
source "$HOME/.bash_profile"
), then use the following SCons command when compiling Godot:scons platform=linuxbsd linker=mold
Using system libraries for faster development¶
Godot bundles the source code of various third-party libraries. You can choose to use system versions of third-party libraries instead. This makes the Godot binary faster to link, as third-party libraries are dynamically linked. Therefore, they don't need to be statically linked every time you build the engine (even on small incremental changes).
However, not all Linux distributions have packages for third-party libraries available (or they may not be up-to-date).
Moving to system libraries can reduce linking times by several seconds on slow CPUs, but it requires manual testing depending on your Linux distribution. Also, you may not be able to use system libraries for everything due to bugs in the system library packages (or in the build system, as this feature is less tested).
To compile Godot with system libraries, install these dependencies on top of the ones listed in the 针对各个发行版的单行命令:
Fedora |
sudo dnf install embree3-devel enet-devel glslang-devel graphite2-devel harfbuzz-devel libicu-devel \
libsquish-devel libtheora-devel libvorbis-devel libwebp-devel libzstd-devel mbedtls-devel \
miniupnpc-devel
|
After installing all required packages, use the following command to build Godot:
scons platform=linuxbsd builtin_embree=no builtin_enet=no builtin_freetype=no builtin_graphite=no builtin_harfbuzz=no builtin_libogg=no builtin_libpng=no builtin_libtheora=no builtin_libvorbis=no builtin_libwebp=no builtin_mbedtls=no builtin_miniupnpc=no builtin_pcre2=no builtin_zlib=no builtin_zstd=no
You can view a list of all built-in libraries that have system alternatives by
running scons -h
, then looking for options starting with builtin_
.
警告
When using system libraries, the resulting library is not portable across Linux distributions anymore. Do not use this approach for creating binaries you intend to distribute to others, unless you're creating a package for a Linux distribution.
使用 Pyston 加快开发速度¶
你可以使用 Pyston 来运行 SCons。Pyston 是一种利用了 JIT 的 Python 语言实现(SCons 就是使用 Python 编写的)。目前它只兼容 Linux。Pyston 可以显著加速增量构建,经常可以达到 1.5× 和 2× 倍。可以将 Pyston 与 Clang 和 LLD 组合,进行更快的构建。
下载 Pyston 的最新绿色版本。
将绿色的
.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
环境变量的一部分。
备注
Alternatively, you can run python -m pip install pyston_lite_autoload
then run SCons as usual. This will automatically load a subset of Pyston's
optimizations in any Python program you run. However, this won't bring as
much of a performance improvement compared to installing "full" Pyston.