使用 Toolbx 构建#

本页为希望使用 Toolbx 作为构建环境来构建 GNOME 模块的用户提供教程。(有关 GNOME 可用的构建方法概述,请参阅 building。)

以下教程使用基于 Fedora 的 Toolbx 容器,但大多数命令适用于其他发行版。它还假定您对 Git 版本控制有一定的了解。

Toolbx 简介#

每个 Toolbx 容器都像一个独立的操作系统,它与您的主机操作系统共享一些内容(例如您主目录中的文件),但其软件是分开保存的,因此您可以安装软件包并手动构建模块到其中,而不会干扰您的主机操作系统。

Toolbx 容器通常通过终端使用。创建后,您在终端中进入 Toolbx 容器,从那时起,大多数命令由容器而不是主机操作系统执行。

在“进入”Toolbx 容器环境时,您可以访问主目录中的文件。但是,文件系统的其他部分来自容器,不与主机操作系统共享。

要使用 Toolbx,需要在您的系统上安装它。如果您正在运行 Fedora Workstation 或 Fedora Silverblue,则已预安装。在其他发行版上,您需要手动安装它。

创建 Toolbx 容器#

要使用 Toolbx 创建容器,请运行

$ toolbox create gnome

这里,gnome 是将赋予新容器的名称。

默认情况下,容器基于主机操作系统的最新版本。因此,如果您使用的是 Fedora,则新容器将使用最新的稳定 Fedora 发行版。(如果您想指定要使用的发行版和版本,可以使用 --distro--version 选项。)在构建 GNOME 模块时,使用包含最新 GNOME 版本的发行版是有益的。

如果这是第一次使用 Toolbx 创建容器,它将下载一个镜像来创建容器。这是一个大文件,可能需要一段时间。但是,一旦镜像下载完成,从它创建容器就会很快。

创建 Toolbx 容器后,使用以下命令进入它

$ toolbox enter gnome

您会看到提示符现在前面有一个 ⬢ 符号。这表示提示符位于 Toolbx 容器内。

构建模块#

一旦您拥有 Toolbx 容器,就可以在其中构建 GNOME 模块。以下说明是通用的,应该适用于大多数 GNOME 模块。但是,在尝试构建模块之前,您应该检查模块的 README 文件。

首先,创建一个目录来保存您想要构建的模块的源代码

⬢ mkdir checkout && cd checkout

然后,使用 Git 克隆您想要构建的模块的仓库。例如,要克隆 gnome-clocks,您将运行

⬢ git clone https://gitlab.gnome.org/GNOME/gnome-clocks.git

克隆仓库后,切换到它并安装任何必需的依赖项。对于 Fedora 容器,一种简单的方法是使用 dnf builddep

⬢ cd gnome-clocks
⬢ sudo dnf builddep -y gnome-clocks

现在配置构建

⬢ meson setup builddir --prefix=/usr

这意味着构建将被缓存到项目目录中的名为 builddir 的目录中,并且模块的构建版本将被放置在 /usr 目录中。

/usr 位于容器内,而不是主机操作系统内,因此构建并安装到此位置不会影响您的系统。但是,这也正是系统上保存软件的位置,因此构建到此位置会覆盖您正在构建的模块的现有版本。这也意味着使用容器的包管理器更新或重新安装模块将覆盖您手动构建的版本。您实际上是用您正在构建的代码替换容器的系统软件。

构建模块

⬢ meson compile -C builddir

安装模块

⬢ sudo meson install -C builddir

最后,停止可能已经运行的模块的任何实例,然后运行新安装的版本

⬢ killall gnome-clocks && gnome-clocks

更新和修改#

假设您的构建成功,现在您可以修改代码、重新构建模块并运行带有您修改后的版本。要更新仓库以获取新的更改,请运行

⬢ git pull -r

要使用任何更改构建项目,请重新运行

⬢ meson compile -C builddir

要运行重新构建的项目,请重新运行

⬢ killall gnome-clocks && gnome-clocks

当出现问题时#

您在手动构建 GNOME 模块时可能会遇到问题。通常这些问题很容易解决,只需要一点练习和侦探工作。

缺少依赖项#

有时,模块所需的依赖项可能未安装或版本不够新。如果发生这种情况,模块将无法构建。

如果构建失败,首先检查终端中的构建输出以查找错误消息。应该有一条消息指示缺少哪个模块或版本错误,可能如下所示:Config error: No package 'foo-2.0' found

接下来,尝试使用包管理器安装缺少的包。这可能需要一些侦探工作来确定需要哪个包。您可以尝试在包管理器中搜索缺少的模块。在 Fedora 容器中,您还可以使用 dnf 安装特定的 pkg-config 文件,该文件缺失。例如

⬢ sudo dnf install 'pkgconfig(foo-2.0)'

安装依赖项时,通常需要安装软件包的版本,该版本以 -devel-dev 后缀。

如果所需的模块不可用作软件包,或者可用的软件包不够新,则需要手动下载并安装它,使用上述手动构建方法。

如果您找不到缺少的软件包或 GNOME 模块,则可以 在 Matrix 上寻求建议

更改未构建#

如果您对模块进行了更改,并且重新构建没有给出这些更改,可能是由于缓存问题。要解决此问题,请尝试使用 meson compile 命令,并带有 --clean 选项。您还可以删除项目文件夹中的 builddir 目录,然后重新编译项目。