使用 Meson

Meson 被设计为尽可能简单易用。本页概述了安装、故障排除和标准使用的初始步骤。

有关更高级的配置,请参阅命令行帮助 meson --help 或位于 Mesonbuild 网站上的 Meson 文档。

目录

需求

仅当使用 Ninja 后端时才需要 Ninja。Meson 也可以生成本地的 VS 和 Xcode 项目文件。

使用包管理器安装

Ubuntu

$ sudo apt-get install python3 python3-pip python3-setuptools \
                       python3-wheel ninja-build

由于我们的频繁发布周期和开发速度,发行版打包的软件可能会很快过时。

使用 Python 安装

需求:pip3

获取 Mesonbuild 最新的版本。

以本地用户身份安装(推荐)

$ pip3 install --user meson

以 root 身份安装

# pip3 install meson

如果您不确定是应该以 root 身份安装还是以本地用户身份安装,请以本地用户身份安装。

从源代码安装

需求:git

Meson 可以直接从克隆的 git 存储库中运行。

$ git clone https://github.com/mesonbuild/meson.git /path/to/sourcedir

故障排除

常见问题

$ meson setup builddir
$ bash: /usr/bin/meson: No such file or directory

描述:python pip 模块安装的默认安装前缀可能未包含在您的 shell 环境 PATH 中。默认安装位置因您的操作系统、发行版和 Python 版本而异。

解决方案:可以通过更改默认 shell 环境 PATH 以包含 Pip 安装二进制文件的路径来解决此问题。例如,这可能是 /usr/local/bin/home/<username>/.local/bin

注意:还有其他方法可以解决此问题,例如使用符号链接或将二进制文件复制到默认路径,但不推荐或不支持这些方法,因为它们可能会破坏包管理互操作性。

编译 Meson 项目

Meson 最常见的用例是在您正在使用的代码库上编译代码。要执行的步骤非常简单。

$ cd /path/to/source/root
$ meson setup builddir && cd builddir
$ meson compile
$ meson test

需要注意的唯一一点是,您需要创建一个单独的构建目录。Meson 不允许您在源代码树中构建源代码。所有构建工件都存储在构建目录中。这样,您就可以同时拥有多个具有不同配置的构建树。这样一来,生成的的文件就不会意外地添加到版本控制中。

要重新编译代码更改后的内容,只需键入 meson compile 即可。构建命令始终相同。您可以对源代码和构建系统文件进行任意更改,Meson 会检测这些更改并执行正确操作。如果要构建优化后的二进制文件,只需在运行 Meson 时使用参数 --buildtype=debugoptimized 即可。建议您为未优化的构建保留一个构建目录,为优化后的构建保留一个构建目录。要编译任何给定的配置,只需进入相应的构建目录并运行 meson compile 即可。

Meson 会自动添加编译器标志以启用调试信息和编译器警告(即 -g-Wall)。这意味着用户不必处理它们,而是可以专注于编码。

使用 Meson 作为发行版打包器

发行版打包器通常希望完全控制使用的构建标志。Meson 本机支持此用例。构建和安装 Meson 项目所需的命令如下所示。

$ cd /path/to/source/root
$ meson --prefix /usr --buildtype=plain builddir -Dc_args=... -Dcpp_args=... -Dc_link_args=... -Dcpp_link_args=...
$ meson compile -C builddir
$ meson test -C builddir
$ DESTDIR=/path/to/staging/root meson install -C builddir

命令行开关 --buildtype=plain 告诉 Meson 不要将它自己的标志添加到命令行中。这使打包器可以完全控制使用的标志。

这与其他构建系统非常相似。唯一的区别是 DESTDIR 变量作为环境变量传递,而不是作为 meson install 的参数传递。

由于发行版构建总是从头开始,因此您可能需要考虑在您的包上启用 统一构建,因为它们更快并且会生成更好的代码。但是,许多项目无法启用统一构建来构建,因此是否使用统一构建的决定必须由打包器根据具体情况进行。

搜索结果为