[⑤Meson]: Build Options构建选项

前言

在2023年末新学习了The Meson build构建系统,作为新一代的构建系统,用起来也非常的“时髦”。在构建代码项目时,可能会有不同编译选项或者数据变量,在编译前由使用者自行根据实际情况选择,Meson提供了一个option definition文件,可以用于定义这些选项options。文件需取名为meson.options或者meson_options.txt,并且位置在项目的root目录下,与顶层的meson.build文件平级。

语法

接下来看下meson.options文件里的内容,下面是官方给出的一个例子:

option('someoption', type : 'string', value : 'optval', description : 'An option')
option('other_one', type : 'boolean', value : false)
option('combo_opt', type : 'combo', choices : ['one', 'two', 'three'], value : 'three')
option('integer_opt', type : 'integer', min : 0, max : 5, value : 3) # Since 0.45.0
option('free_array_opt', type : 'array', value : ['one', 'two'])  # Since 0.44.0
option('array_opt', type : 'array', choices : ['one', 'two', 'three'], value : ['one', 'two'])
option('some_feature', type : 'feature', value : 'enabled')  # Since 0.47.0
option('long_desc', type : 'string', value : 'optval',description : 'An option with a very long description' +'that does something in a specific context') # Since 0.55.0

option的语法是:

option('option_name', type : '', value : , description : '')

可以用description来描述option,没有指定description时,默认就是使用option_name。
option数据类型:

  • string:没有申明value的话,默认为空字符串。
  • boolean:vaule为true或者false,没有申明value的话,默认为true。
  • combo:可以选择的值定义在choices中,没有申明value的话,默认使用choices中的第一个值。
  • integer:可以定义min跟max value。
  • array:字符串数组。可以用choices参数来限制有效的字符串数组内容,没有申明value的话,默认就为choices中的整个字符串数组。
  • feature:feature类型含三个值:enabled,disabled和auto。主要时用于Meson其他命令中的required参数(例如dependency(),find_program()等)。enabled对应的就是required : true,auto对应的是required : false,disabled总会返回not-found。下面是使用的例子:
d = dependency('foo', required : get_option('myfeature'))
if d.found()app = executable('myapp', 'main.c', dependencies : [d])
endif
if get_option('myfeature').enabled() # .enabled() .disabled() .auto(), used to check the value of the feature# ...
endif

另外把feature定义为auto的好处是可以在meson setup的时候用auto-features={ auto | enabled | disabled }批量地覆盖所有options中的auto数据:

meson setup build --auto-features=enabled

需要注意的时option的值不能在其他Meson脚本中改变,需要在外部用meson configure -D命令(在build目录下使用meson configure -D)改变:

 meson configure -Doption=newvaluemeson configure -Doption=[newvalue]meson configure --auto-features=enabled

也可以直接使用meson configure来查看所有options的值,以Intel的DPDK项目为例子:
在这里插入图片描述
在这里插入图片描述

使用build options

在Meson脚本meson.build中可以使用get_option()命令来获取options的值:

# Obtains the value of the [project build option](Build-options
str | int | bool | feature | list[str | int | bool] get_option(str option_name,     # Name of the option to query
)

例如在DPDK中使用的两个例子:

# in meson_options.txt
option('flexran_sdk', type: 'string', value: '', description:'Path to FlexRAN SDK optional Libraries for BBDEV device')# configure command
meson configure -Dflexran_sdk=<path-to-workspace>/FlexRAN-FEC-SDK-19-04/sdk/build-avx512-icc/install# in meson.build
path = get_option('flexran_sdk')
lib4g = cc.find_library('libturbo', dirs: [path + '/lib_turbo'], required: false)
# in meson_options.txt
option('developer_mode', type: 'feature', description:'turn on additional build checks relevant for DPDK developers')# in meson.build
developer_mode = false
if get_option('developer_mode').auto()if meson.version().version_compare('>=0.53') # fs module availablefs = import('fs')developer_mode = fs.is_dir('.git')endif
elsedeveloper_mode = get_option('developer_mode').enabled()
endif
if developer_modemessage('## Building in Developer Mode ##')
endif

其他

Deprecated options,在Meson 0.60版本之后options支持deprecated参数,当option的value为deprecated中的值时,会有警告消息:

# Option fully deprecated, it warns when any value is set.
option('o1', type: 'boolean', deprecated: true)

结语

本篇博客是对Meson Build Options构建选项的介绍,Meson还有其他实用的功能,后续为大家带来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/316706.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt第一个UI程序设计

在第一个Qt程序的基础上我对ui界面进行设计&#xff0c;点击设计按钮 然后 拖动Label按钮输入想要输入的语句。 运行结果如下图。

快速打通 Vue 3(一):基本介绍与组合式 API

很激动进入了 Vue 3 的学习&#xff0c;作为一个已经上线了三年多的框架&#xff0c;很多项目都开始使用 Vue 3 来编写了 这一组文章主要聚焦于 Vue 3 的新技术和新特性 如果想要学习基础的 Vue 语法可以看我专栏中的其他博客 Vue&#xff08;一&#xff09;&#xff1a;Vue 入…

Elasticsearch:如何使用 Elasticsearch 进行排序

虽然你在唱这首歌时可能会想象圣诞老人&#xff0c;但欧洲民间传说&#xff0c;尤其是阿尔卑斯地区的民间传说&#xff0c;有两个传奇人物圣尼古拉斯和坎普斯。 象征着慷慨和善良的圣尼古拉斯&#xff0c;在 12 月 6 日 为乖巧的孩子们带来礼物和欢乐&#xff01; 相比之下&…

SpringBoot 项目如何生成 swagger 文档

推荐使用 springdoc-openapi 的理由 1、springdoc-openapi 是 spring 官方出品&#xff0c;与 springboot 兼容更好&#xff08;springfox 兼容有坑&#xff09; 2、springdoc-openapi 社区更活跃&#xff0c;springfox 已经 2 年没更新了 3、springdoc-openapi 的注解更接近 …

linux常见基础指令

入门常见基础指令 ls、stat、 pwd 、cd、tree、 whoami、 touch、 mkdir、 rm 、 man、 cp、mv、cat、tac、echo、>、 >>、 < 、more、 less、 head、 tail、date、 cal、 find、 which、alias、whereis、grep、zip与unzip、 tar、bc、uname、xargs... 热键Tab、…

学校安全:这个门禁监控技术,速来码住!

在当今社会&#xff0c;随着城市化的加速和科技的飞速发展&#xff0c;安全问题日益引起人们的关注。在这个背景下&#xff0c;门禁监控系统作为一种重要的安全管理工具&#xff0c;正扮演着越来越关键的角色。 门禁监控系统作为一种先进的安全管理工具&#xff0c;不仅提供了对…

CRM系统如何实现市场销售管理?CRM系统有哪些营销功能

CRM管理系统中的营销管理模块&#xff0c;它的锋芒常被销售管理所掩盖&#xff0c;但对于企业的业务来说同样重要。营销部门虽然不像销售人员一样直接面对客户&#xff0c;却是挖掘线索、商机的重要角色。CRM在市场营销领域的关键功能包括&#xff1a;营销漏斗、客户细分、营销…

xadmin-plus

python之Xadmin-plus是什么&#xff1f; xadmin-plus: xadmin的django3.2版本支持。 Xadmin是一个非常优秀的Django Admin插件&#xff0c;可惜的是已经停止更新。Xadmin-plus对其进行了升级兼容。支持python3.10、Django3.2。 特性 Django Admin直接替换基于Twitter Boots…

YoloV7改进策略:AAAI 2024 最新的轴向注意力|即插即用,改进首选|全网首发,包含数据集和代码,开箱即用!

摘要 https://arxiv.org/pdf/2312.08866.pdf 本文提出了一种名为Multi-scale Cross-axis Attention(MCA)的方法,用于解决医学图像分割中的多尺度信息和长距离依赖性问题。该方法基于高效轴向注意力,通过计算两个平行轴向注意力之间的双向交叉注意力,更好地捕获全局信息。…

三、C语言中的分支与循环—条件操作符 与逻辑操作符(3)

本章分支结构的学习内容如下&#xff1a; 三、C语言中的分支与循环—if语句 (1) 三、C语言中的分支与循环—关系操作符 (2) 三、C语言中的分支与循环—条件操作符 与逻辑操作符(3) 三、C语言中的分支与循环—switch语句&#xff08;4&#xff09;分支结构 完 本章循环结构的…

【模拟电路】模拟集成电路之神-NE555

一、集成电路NE555简介 二、功能框图与引脚说明 三、比较器&#xff08;运放&#xff09; 四、反相门&#xff08;非门&#xff09; 五、或非门 六、双稳态触发器 七、NE555的工作原理 集成电路NE555的芯片手册 C5157696 一、集成电路NE555简介 NE555起源于上个世纪70年代&a…

【C语言】Linux socket 编程

一、Socket 通信过程 在 Linux 系统中&#xff0c;socket 是一种特殊的文件描述符&#xff0c;用于在网络中的不同主机间或者同一台主机中的不同进程间进行双向通信。它是通信链路的端点&#xff0c;可以看作是网络通信的接口。Socket 通信过程主要分为以下几个步骤&#xff1a…