gpt4 book ai didi

c++ - 处理具有多种构建类型的介子构建选项

转载 作者:行者123 更新时间:2023-12-01 14:08:49 24 4
gpt4 key购买 nike

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

最佳答案

I'm still unsure about the intended best practice to handle different options for different buildtypes



预期的最佳实践是使用 meson configure根据需要设置/更改“buildtype”选项。您不必“一次性并且永远”执行此操作。但是,当然,您仍然可以使用几个不同的构建树(例如“调试”和“发布”)来加快进程。

How would the portable-style build options be conditionally set within the Meson script?



b_ndebug ,您可以使用特殊值: ['b_ndebug=if-release'] ,这正是您想要的。此外,您应该考虑到 meson 中的几个 GNU 风格的命令行参数。 始终便携 , 由于内部编译器特定的替换。如果我没记错的话,这些包括: -D , -I , -L-l .

但是,一般来说,不鼓励更改脚本中的“buildtype”选项(除了 default_options ,它会被 meson setup/configure 覆盖),并且 meson故意缺少 set_option()功能。

Is it possible to have the built-in portable-style build options (such as b_sanitize) have a check if they are supported?



AFAIK,不,除了 has_argument()你上面用过。但是,如果某些构建选项,例如 b_sanitize , 底层编译器不支持,那么它会自动设置为 void,所以使用它不应该破坏任何东西。

关于c++ - 处理具有多种构建类型的介子构建选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53424472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com