6

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

介子是否支持构建许多目标?这种情况有标准解决方案吗?我可以尝试将项目中的所有源代码组织到共享库中,但是我必须决定如何对它们进行分组,而使用自动工具我不必决定这一点。我还没有找到这方面的文档。

-奔日

PS这是一个最小的例子:

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

4

1 回答 1

4

使用相同的编译标志一次又一次地编译相同的源代码只会浪费 CPU 能力,因为它将生成相同的二进制文件,除非您有不可重现的构建技巧,例如日期和时间。

如果您的意思是为所有目标构建通用代码,您可以只使用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)
于 2017-12-09T05:45:35.843 回答