阅读了 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
)检查它们是否受支持?