Meson 文件重写器
从 0.50.0 版本开始,Meson 可以从命令行对 meson.build
文件进行一些基本修改。目前支持的操作包括
- 对于构建目标
- 添加/删除源文件
- 添加/删除目标
- 修改选定的关键字参数集合
- 打印一些 JSON 信息
- 对于依赖项
- 修改选定的关键字参数集合
- 对于 project 函数
- 修改选定的关键字参数集合
- 修改默认选项列表
重写器既有正常的命令行界面,也有“脚本模式”。正常的 CLI 主要用于日常使用。“脚本模式”则用于外部程序(IDE、图形前端等)。
重写器本身被认为是稳定的,但用户界面和“脚本模式”API 可能会在未来发生变化。这些变化也可能破坏与旧版本的向后兼容性。
我们也欢迎 API 改进建议。
使用重写器
所有重写器函数都通过 meson rewrite
访问。Meson 重写器假定它是在项目根目录中运行的。如果不是这种情况,请使用 --sourcedir
指定实际的项目源目录。
添加和删除源代码
最常见的操作可能是向构建目标添加和删除源文件。这可以通过以下方式轻松完成:
meson rewrite target <target name/id> {add/rm} [list of sources]
例如,给定以下示例
src = ['main.cpp', 'fileA.cpp']
exe1 = executable('testExe', src)
源文件 fileB.cpp
可以通过以下方式添加:
meson rewrite target testExe add fileB.cpp
执行此命令后,新的 meson.build
将如下所示:
src = ['main.cpp', 'fileA.cpp', 'fileB.cpp']
exe1 = executable('testExe', src)
在这种情况下,exe1
也可用于目标名称。这是因为重写器还会搜索赋值和唯一的 Meson ID,这些 ID 可以通过自省获取。如果有多个目标具有相同的名称,Meson 将不会执行任何操作并打印一条错误消息。
有关更多信息,请参阅重写器目标命令的帮助输出。
添加和删除 extra_files
从 0.61.0 版本开始
与向目标添加和删除源文件的方式相同,您可以修改目标的 extra_files
列表
meson rewrite target <target name/id> {add_extra_files/rm_extra_files} [list of extra files]
设置项目版本
也可以使用重写器设置特定函数的关键字参数。设置或删除关键字参数的通用命令为
meson rewrite kwargs {set/delete} <function type> <function ID> <key1> <value1> <key2> <value2> ...
例如,可以使用以下命令设置项目版本:
meson rewrite kwargs set project / version 1.0.0
目前,仅支持以下函数类型
- dependency
- target(任何构建目标,函数 ID 为目标名称/ID)
- project(函数 ID 必须为
/
,因为 project() 只能调用一次)
有关更多信息,请参阅 rewrite kwargs 命令的帮助输出。
请注意,msys bash 可能会将 /
展开为路径。传递 //
将被 msys bash 转换为 /
,但为了保持使用 shell 无关,rewrite 命令也允许使用 //
作为函数 ID,这样它就可以在 msys bash 和其他 shell 中使用。
设置项目默认选项
要设置和删除默认选项,请使用以下命令:
meson rewrite default-options {set/delete} <opt1> <value1> <opt2> <value2> ...
限制
重写 Meson 文件不能保证保留修改函数的缩进。此外,修改语句中的注释将被删除。此外,所有源文件都将按字母顺序排序。
例如,在以下代码中将 e.c
添加到 srcs
# Important comment
srcs = [
'a.c', 'c.c', 'f.c',
# something important about b
'b.c', 'd.c', 'g.c'
]
# COMMENT
将导致以下代码
# Important comment
srcs = [
'a.c',
'b.c',
'c.c',
'd.c',
'e.c',
'f.c',
'g.c'
]
# COMMENT
使用“脚本模式”
“脚本模式”应该是第三方程序的首选 API,因为它提供了更大的灵活性以及更高的 API 稳定性。“脚本”存储在 JSON 格式中,并使用 meson rewrite command <JSON 文件或字符串>
执行。
JSON 格式定义如下
[
{
"type": "function to execute",
...
}, {
"type": "other function",
...
},
...
]
主数组中的每个对象都必须包含一个 type
条目,该条目指定应执行哪个函数。
目前,支持以下函数
- target
- kwargs
- default_options
目标修改格式
类型 target
的格式定义如下
{
"type": "target",
"target": "target ID/name/assignment variable",
"operation": "one of ['src_add', 'src_rm', 'target_rm', 'target_add', 'extra_files_add', 'extra_files_rm', 'info']",
"sources": ["list", "of", "source", "files", "to", "add, remove"],
"subdir": "subdir where the new target should be added (only has an effect for operation 'tgt_add')",
"target_type": "function name of the new target -- same as in the CLI (only has an effect for operation 'tgt_add')"
}
键 sources
、subdir
和 target_type
是可选的。
关键字参数修改格式
类型 target
的格式定义如下
{
"type": "kwargs",
"function": "one of ['dependency', 'target', 'project']",
"id": "function ID",
"operation": "one of ['set', 'delete', 'add', 'remove', 'remove_regex', 'info']",
"kwargs": {
"key1": "value1",
"key2": "value2",
...
}
}
默认选项修改格式
类型 default_options
的格式定义如下
{
"type": "default_options",
"operation": "one of ['set', 'delete']",
"options": {
"opt1": "value1",
"opt2": "value2",
...
}
}
对于操作 delete
,options
的值可以是任何东西(包括 null
)
提取信息
重写器还为 target
和 kwargs
类型提供 info
操作。使用此操作时,Meson 将向 stderr 打印一个 JSON 转储,其中包含有关重写器所关注的构建目标/函数关键字参数的所有可用信息。
输出格式目前处于试验阶段,将来可能会发生变化。
搜索结果为