当许多目标使用相同的C 源时,如何加快介子的构建

How do I speed up Meson build when many targets use the same C++ sources

本文关键字:何加快 构建 源时 目标 许多      更新时间:2023-10-16

我有一个具有58个目标的新介子项目。他们中的许多人使用相同的 *.cc文件,而梅森为每个目标构建了一个 *.cc文件,这比自动工具慢得多。另外,编译标志在目标之间应相同,因此从理论上讲,梅森应该能够重新使用对象。

建立了许多在介子中得到充分支持的目标?有这样的情况有标准解决方案吗?我可以尝试将项目中的所有资源组织到共享库中,但是随后我必须决定如何对它们进行分组,而使用自动工具,我不必决定这一点。我尚未设法找到有关此文件的文档。

-benri

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

--------文件:app1.cc -------

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

-------文件: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也有两个条目。

将相同的源再次编译带有相同的编译标志,并且再次只是浪费CPU功率,因为它会产生相同的二进制文件,除非您有不可再现的构建技巧,例如日期和时间。

如果您的意思是为所有目标构建通用代码,则可以只需使用static_library构建您的代码并将其重复使用您的目标二进制。

lib.cc中移动f()并使用以下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)