在 Meson 中使用 Rust
避免使用 extern crate
由于 Rust 源代码中 extern crate
语句导致 rustc 链接的箱子,Meson 无法跟踪依赖项信息。如果您的箱子依赖项在 Meson 中得到正确表达,那么只要您使用 Rust 2018 版本或更高版本,就不需要在 Rust 代码中使用 extern crate
语句,这意味着将 rust_std=2018
(或更高版本)添加到 project(default_options)
参数中。
extern crate
问题的一个例子是,如果您从 Meson 构建文件中删除了一个箱子,其他使用 extern crate
依赖该箱子的箱子可能会继续链接到已删除箱子的剩余 rlib,而不是构建失败,直到构建目录被清除。
此限制可以通过未来的 rustc 改进来解决,例如,如果 -Z binary-dep-depinfo
功能稳定。
混合 Rust 和非 Rust 源代码
Meson 目前不支持创建包含 Rust 和非 Rust 源代码的单个目标,因此必须编译多个库并链接它们。
rust_lib = static_library(
'rust_lib',
sources : 'lib.rs',
...
)
c_lib = static_library(
'c_lib',
sources : 'lib.c',
link_with : rust_lib,
)
这是 Meson 的实现细节,将来可能会更改。
混合生成的和静态源代码
注意 此功能在 0.62 中添加。
您可以为此使用 structured_src
。结构化源是将目录字符串映射到源或源列表的字典。使用结构化源时,所有输入 *必须* 列出,因为 Meson 可能将源从源树复制到构建树。
在不使用生成源时,通常不需要结构化输入。
作为实现细节,Meson 会尝试在配置时确定它是否需要复制文件,如果可以,它将跳过复制。复制在构建时完成(如果需要),以避免在源代码更改时重新配置。
executable(
'rust_exe',
structured_sources(
'main.rs',
{
'foo' : ['bar.rs', 'foo/lib.rs', generated_rs],
'foo/bar' : [...],
'other' : [...],
}
)
)
与 rust-analyzer 一起使用
自 0.64.0 起。
如果项目中存在任何 rust 目标,Meson 将在构建目录的根目录中生成一个 rust-project.json
文件。大多数 IDE 需要配置为使用该文件,因为它不在源代码根目录中(Meson 不会将文件写入源代码目录)。请参阅上游文档,以获取有关如何配置它的更多信息。
链接标准库
Meson 将静态链接 Rust 标准库(例如 libstd),除非目标是 proc macro 或 dylib,或者它依赖于 dylib,在这种情况下,-C prefer-dynamic
将传递给 Rust 编译器,并且标准库将被动态链接。
搜索结果是