Rust 模块

(0.57.0 中新增) (1.0.0 起稳定)

rust 模块提供了将 rust 代码集成到 Meson 的帮助程序。目标是使在 Meson 中使用 rust 更愉快,同时仍然保持 mesonic,这意味着它试图使 Rust 更像 Meson,而不是 Meson 更像 rust。

函数

test()

rustmod.test(name, target, ...)

此函数从现有的基于 rust 的目标创建一个新的 rust 单元测试目标,该目标可能是一个库或可执行文件。它通过复制传递给原始目标的源代码和参数,并向编译添加 --test 参数来做到这一点,然后创建一个新的测试目标,该目标使用 rust 测试协议调用该可执行文件。

此函数接受两个位置参数,第一个是测试的名称,第二个是作为基于 rust 的目标的库或可执行文件。它还接受以下关键字参数

  • dependencies: 测试专用依赖项列表
  • link_with: 要链接的附加构建目标列表 (自 1.2.0 起)
  • rust_args: 传递给 Rust 编译器的额外参数列表 (自 1.2.0 起)

此函数还接受 test() 函数接受的所有关键字参数,除了 protocol,它将自动设置。

bindgen()

此函数包装 bindgen 以简化围绕 C 库创建 rust 绑定。与使用 generatorcustom_target 调用 bindgen 相比,这有两个优点

  • 它处理 include_directories,因此不必手动将其转换为 -I...
  • 它自动设置了一个依赖文件,使结果更可靠
  • 它自动处理断言,使 Rust 和 C/C++ 具有相同的行为

它接受以下关键字参数

  • input: 文件、字符串或自定义目标列表。第一个元素是 bindgen 将解析的头文件,其他元素是依赖项。
  • output: 输出 rust 文件的名称
  • output_inline_wrapper: 可选输出 c 文件的名称,其中包含用于静态内联函数的包装器。这需要 bindgen-0.65 或更高版本 (自 1.3.0 起)。
  • include_directories: include_directoriesstring 对象列表,这些对象传递给 clang 作为 -I 参数 (自 1.0.0 起字符串)
  • c_args: 传递给 clang 的字符串参数列表,保持不变
  • args: 传递给 bindgen 的字符串参数列表,保持不变。
  • dependencies: 传递给底层 clang 调用的 Dependency 对象列表 (自 1.0.0 起)
  • language: ccpp 的文字字符串值。设置此值将强制 bindgen 将源代码视为给定的语言。默认情况下,根据输入文件扩展名进行检查。(自 1.4.0 起)
  • bindgen_version: 字符串版本值列表。设置此值后,找到的 bindgen 二进制文件必须符合这些约束。(自 1.4.0 起)
rust = import('unstable-rust')

inc = include_directories('..'¸ '../../foo')

generated = rust.bindgen(
    input : 'myheader.h',
    output : 'generated.rs',
    include_directories : [inc, include_directories('foo')],
    args : ['--no-rustfmt-bindings'],
    c_args : ['-DFOO=1'],
)

如果头文件依赖于生成的标题,则必须将这些标题也传递给 bindgen,以确保正确的依赖关系排序,静态标题不需要传递,因为会生成一个适当的依赖文件

h1 = custom_target(...)
h2 = custom_target(...)

r1 = rust.bindgen(
  input : [h1, h2],  # h1 includes h2,
  output : 'out.rs',
)

自 1.1.0 起,当 b_ndebug 选项设置时,Meson 将同步 Rust 和 C/C++ 的断言 (通过 -DNDEBUG 用于 C/C++,以及 -C debug-assertions=on 用于 Rust),并将传递 -DNDEBUG 作为额外参数传递给 clang。这允许使用 #[cfg(debug_asserions)] 和/或 cfg!() 可靠地包装 -DNDEBUG 控制的行为。在 1.1.0 之前,Meson 从未为 Rust 打开断言。

自 1.2.0 起,可以通过属性部分的 *机器文件* 指定要传递给 clang 的其他参数

[properties]
bindgen_clang_arguments = ['-target', 'x86_64-linux-gnu']

proc_macro()

rustmod.proc_macro(name, sources, ...)

自 1.3.0 起

此函数创建一个 Rust proc-macro 箱,类似于

shared_library()(name, sources,
  rust_crate_type: 'proc-macro',
  native: true)

proc-macro 目标可以传递给其他 Rust 目标的 link_with 关键字参数。

只允许 shared_library() 关键字参数的子集

  • rust_args
  • rust_dependency_map
  • sources
  • dependencies
  • extra_files
  • link_args
  • link_depends
  • link_with
  • override_options

搜索结果为