统一构建

统一构建是一种用于缩短构建时间的技术。其工作原理相对简单。假设我们有源文件src1.csrc2.csrc3.c。通常我们会运行编译器三次,每个文件一次。在统一构建中,我们改为将所有这些源文件编译成一个单元。最简单的方法是创建一个看起来像这样的新源文件。

#include<src1.c>
#include<src2.c>
#include<src3.c>

然后编译它,而不是单独的几个文件。实际的加速效果取决于代码库,当然,但编译时间的加速超过 50% 并不罕见。即使统一构建只使用一个 CPU,而单独的编译可以并行运行,也会出现这种情况。统一构建还可以导致更快的代码,因为编译器可以进行更积极的优化(例如内联)。

缺点是增量构建与完整重建一样慢(因为它们实际上就是完整重建)。统一编译还会使用更多内存,这在某些情况下可能会成为问题。源代码中也可能存在一些需要修复才能进行统一编译的错误。例如,如果src1.csrc2.c都包含一个同名的静态函数或变量,就会发生冲突。

Meson 内置支持统一构建。要启用它们,只需在命令行中传递--unity on或在项目默认选项中启用统一构建。除了上面讨论的潜在冲突问题外,不需要进行任何代码更改。Meson 会自动为你生成所有必要的包含文件。

可以使用override_options参数修改给定构建目标的统一设置。当构建目标与统一构建不兼容时,这可能很有用。

unity选项还可以取值subprojects,以便使用统一构建子项目,同时以增量方式构建主项目。

unity_size选项允许指定每个统一文件包含的源文件数量。默认值为 4。每个统一文件包含的源文件越多,完整构建的速度就会越快,但增量构建的速度就会越慢。要为每个构建目标只获得一个统一文件,可以使用一个非常大的数字作为unity_size的值。

搜索结果为