运行 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
命令接受builddir
和srcdir
参数。如果没有给出srcdir
,Meson 将根据pwd
和meson.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。
搜索结果为