Прочитав страницы сайта 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
) есть проверка, если они поддерживаются?