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