Как ускорить сборку Meson, когда многие цели используют одни и те же источники C ++

У меня есть новый мезонный проект с 58 целями. Многие из них используют одни и те же файлы * .cc, и meson создает каждый файл * .cc один раз для каждой цели, что намного медленнее, чем автоинструмент. Кроме того, флаги компиляции должны быть одинаковыми между целями, поэтому в теории мезон должен иметь возможность повторно использовать объекты.

Хорошо ли поддерживается много целей в мезоне? Есть ли стандартное решение для подобных ситуаций? Я мог бы попытаться организовать все источники в моем проекте в общие библиотеки, но тогда мне нужно было бы решить, как их сгруппировать, а с автоинструментами мне не нужно это решать. Мне не удалось найти документацию по этому вопросу.

-BenRI

Постскриптум Вот минимальный пример:

——— файл: 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.

1

Решение

Снова скомпилировать тот же исходный код с теми же флагами компиляции и
опять же талия мощности процессора, потому что он будет генерировать то же самое
двоичный файл, если у вас нет невоспроизводимые хитрости сборки как дата и
время.

Если вы имели в виду создание общего кода для всех целей, вы можете
просто используйте 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)
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]