当许多目标使用相同的C ++源时,如何加速Meson构建

时间:2017-12-08 12:18:23

标签: c++ meson-build

我有一个包含58个目标的新介子项目。他们中的许多人使用相同的* .cc文件,meson为每个目标构建一次* .cc文件,这比autotools慢得多。此外,目标之间的编译标志应该是相同的,因此理论上meson应该能够重用对象。

是否在介子中建立了很多目标?对于这样的情况,有没有标准的解决方案?我可以尝试将项目中的所有资源组织到共享库中,但之后我必须决定如何对它们进行分组,而使用autotools我不必决定。我还没有找到相关的文档。

-BenRI

P.S。这是一个最小的例子:

-------- file:app1.cc -------

int f(int x ,int y) {return x;}
int main() { return f(0,1);}

------ file:meson.build -----

project('app12','cpp')
executable('app1',['app1.cc'])
executable('app2',['app1.cc'])

----------命令-----------

% meson . meson
% cd meson
% meson configure -Dwarning_level=3
% ninja

您应该会看到未使用参数的警告' y'发生两次。 文件compile_commands.json还有两个app1.cc条目。

1 个答案:

答案 0 :(得分:1)

再次使用相同的编译标志编译相同的源 再次只是CPU功率的腰部,因为它会产生相同的 二进制文件,除非你有unreproducible build tricks日期和 时间。

如果您的意思是为所有目标构建通用代码,则可以 只需使用static_library来构建代码并从中重用它 你的目标二进制文件。

f()移至lib.cc并使用以下meson.build

project('app12','cpp')
mylib = static_library('mylib', 'lib.cc')
executable('app1', 'app1.cc', link_with : mylib)
executable('app2', 'app1.cc', link_with : mylib)