运行 Meson

有两种不同的方法可以调用 Meson。首先,您可以使用命令/path/to/source/meson.py直接从源代码树中运行它。其次,Meson 也可能被安装,在这种情况下,命令只是meson。在本手册中,为了简便起见,我们只使用后一种格式。

在撰写本文时,Meson 只有命令行版本可用。这意味着 Meson 必须使用终端调用。如果您希望使用 MSVC 编译器,则需要在“Visual Studio 命令提示符”下运行 Meson。

所有可用的 Meson 命令都在命令参考页面上列出。

配置构建目录

让我们假设我们有一个包含 Meson 构建系统的源代码树。这意味着在最顶层的目录中有一个名为meson.build的文件。我们运行以下命令来启动构建。

cd /path/to/source/root
meson setup builddir

我们使用setup命令调用 Meson,并向其提供构建目录的位置。Meson 使用源代码外构建

提示:Meson 的语法是meson [command] [arguments] [options]setup命令接受builddirsrcdir参数。如果没有给出srcdir,Meson 将根据pwdmeson.build的位置推断出srcdir

然后,Meson 加载构建配置文件,并在构建目录中写入相应的构建后端。默认情况下,Meson 生成调试构建,这会打开基本警告和调试信息,并禁用编译器优化。

此外,调用可以将选项传递给 Meson。选项列表已在此处进行文档记录这里

您可以使用--buildtype命令行参数指定不同的构建类型。它可以具有以下值之一。

含义
plain 不使用额外的构建标志,即使对于编译器警告也是如此,这对于发行版打包程序和其他需要自己指定所有参数的情况很有用
debug 生成调试信息,但结果未优化,这是默认值
debugoptimized 生成调试信息,代码已优化(在大多数编译器中,这意味着-g -O2
release 完全优化,没有调试信息

构建目录是强制性的。这样做的原因是它极大地简化了构建过程。Meson 在任何情况下都不会在源代码目录中写入文件(如果这样做,则是一个错误,应予以修复)。这意味着用户不需要在版本控制的忽略列表中添加一堆文件。这也意味着您可以为任何给定的源代码树创建任意数量的构建目录。

例如,如果我们想测试使用 Clang 编译器而不是系统默认值来构建源代码,我们可以键入以下命令

cd /path/to/source/root
CC=clang CXX=clang++ meson setup buildclang

如果您的代码具有多个配置选项(例如多个数据后端),这种分离会更加强大。您可以为每个选项创建一个单独的子目录。您还可以拥有针对优化构建、代码覆盖率、静态分析等的构建目录。它们都被整齐地分开并使用相同的源代码树。在不同配置之间切换只是一个更改到相应目录的问题。

除非另有说明,否则所有以下命令行调用都应在源代码目录中运行。

默认情况下,Meson 将使用 Ninja 后端来构建您的项目。如果您希望使用任何其他后端,您需要在配置时传递相应的参数。例如,以下是如何使用 Meson 生成 Visual Studio 解决方案。

meson setup <build dir> --backend=vs

然后,您可以使用 Visual Studio 打开生成的解决方案并以通常的方式对其进行编译。可以使用meson setup --help获取后端列表。

环境变量

有时您想添加额外的编译器标志,这可以通过在调用 Meson 时将它们传递到环境变量中来完成。请参阅参考表以获取所有环境变量的列表。但是请注意,这些环境变量仅用于本机编译器,并且不会影响用于交叉编译的编译器,在交叉编译中将使用交叉文件指定的标志。

此外,可以使用--buildtype=plain选项阻止 Meson 自己添加标志,在这种情况下,您必须提供所需的完整编译器和链接器参数。

从源代码构建

要开始构建,只需键入以下命令。

meson compile -C builddir

有关更多信息,请参阅meson compile说明

直接使用 ninja 构建

默认情况下,Meson 使用Ninja 构建系统来实际构建代码。要开始构建,只需键入以下命令。

ninja -C builddir

Ninja 和 Make 之间的主要可用性区别在于,Ninja 会自动检测计算机中的 CPU 数量并相应地使其本身并行化。您可以使用命令行参数-j <num processes>覆盖使用的并行进程数量。

需要注意的是,在初始配置步骤之后,ninja是您唯一需要键入的命令来编译。无论您如何更改源代码树(除非将其移动到全新的位置),Meson 都将检测更改并相应地重新生成自身。如果您有多个构建目录,这尤其有用。通常其中一个用于开发(“调试”构建),而其他构建仅在需要时才使用(例如“静态分析”构建)。任何配置都可以通过cd到相应目录并运行 Ninja 来构建。

运行测试

Meson 提供对运行测试的原生支持。执行此操作的命令很简单。

meson test -C builddir

有关更多信息,请参阅meson test说明

Meson 不强制使用任何特定的测试框架。您可以随意使用 GTest、Boost Test、Check,甚至自定义可执行文件。

注意:它也可以使用以下命令直接使用 ninja 调用

ninja -C builddir test

安装

安装构建的软件同样简单。

meson install -C builddir

有关更多信息,请参阅meson install说明

请注意,Meson 仅安装明确标记为可安装的构建目标,如安装目标文档中所述。

默认情况下,Meson 安装到/usr/local。这可以通过在配置时向 Meson 传递命令行参数--prefix /your/prefix来更改。Meson 还支持在例如构建包时使用的DESTDIR变量。它是这样使用的

DESTDIR=/path/to/staging meson install -C builddir

注意:它也可以使用以下命令直接使用 ninja 调用

ninja -C builddir install

命令行帮助

Meson 具有标准的命令行帮助功能。可以通过以下命令访问它。

meson --help

退出状态

Meson 成功退出时状态为 0,命令行或 meson.build 文件出现问题时状态为 1,内部错误时状态为 2。

搜索结果为