Прочитав страницы сайта Месон (как правило, высокого качества), Я до сих пор не уверен насчет предполагаемой лучшей практики для обработки разных опций для разных типов сборки.
Итак, чтобы указать отладочную сборку:
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
) есть проверка, если они поддерживаются?
Задача ещё не решена.
Других решений пока нет …