【发布时间】:2019-02-09 18:38:55
【问题描述】:
阅读了 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)是否受支持?
【问题讨论】:
-
原来
meson -Dcpp_args=-ffoo甚至不适用于交叉编译器的情况,但是可以在交叉编译器文件中指定 cpp_args,这增加了问题的复杂性。 -
是否可以为可执行文件指定构建类型(调试/发布)或必须为项目指定? (如果可以只为可执行文件指定是否也适用于依赖库的选项?)
-
@Nic30g 最好有整个项目的构建类型......但如果你有一个可执行文件的解决方案,我也想听听。跨度>
标签: c++ build meson-build