Обработка параметров сборки Meson с несколькими типами сборки

Прочитав страницы сайта Месон (как правило, высокого качества), Я до сих пор не уверен насчет предполагаемой лучшей практики для обработки разных опций для разных типов сборки.

Итак, чтобы указать отладочную сборку:

meson [srcdir] --buildtype=debug

Или указать сборку релиза:

meson [srcdir] --buildtype=release

Однако, если я хочу добавить b_sanitize=address (или другой произвольный сложный набор аргументов) только для отладочных сборок и b_ndebug=true только для релизных сборок я бы сделал:

meson [srcdir] --buildtype=debug -Db_sanitize=address ...
meson [srcdir] --buildtype=release -Db_ndebug=true ...

Тем не менее, добавить больший набор пользовательских аргументов в командную строку будет труднее, и мне кажется, что лучше добавить это в файл meson.build.
Итак, я знаю, что могу установить некоторые встроенные параметры таким образом:

project('myproject', ['cpp'],
default_options : ['cpp_std=c++14',
'b_ndebug=true'])

Но они безоговорочно установлены.

Таким образом, условие будет выглядеть примерно так:

if get_option('buildtype').startswith('release')
add_project_arguments('-DNDEBUG', language : ['cpp'])
endif

Что является одним из способов сделать это, однако, казалось бы, b_ndebug=true путь будет предпочтительнее add_project_arguments('-DNDEBUG')потому что это портативный.

Как условно установить параметры сборки в портативном стиле в скрипте Meson?

Дополнительно, b_sanitize=address устанавливается без какого-либо теста, поддерживает ли его компилятор. Я бы предпочел сначала проверить, поддерживается ли он (например, может отсутствовать библиотека):

if meson.get_compiler('cpp').has_link_argument('-fsanitize=address')
add_project_arguments('-fsanitize=address', language : ['cpp'])
add_project_link_arguments('-fsanitize=address', language : ['cpp'])
endif

Возможно ли иметь встроенные опции сборки в портативном стиле (например, b_sanitize) есть проверка, если они поддерживаются?

0

Решение

Задача ещё не решена.

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

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

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