将非 Rust 存储库声明为 Rust 项目中的依赖项的最佳方法是什么?

2024-04-18

我有一个 Rust 项目,我想使用另一个非 Rust 存储库中存在的 protobuf 定义。

我打算下载 protobuf 存储库,创建一个src/common_protobuf我的主存储库中的模块,使用cargo build将每个 protobuf 的所有 Rust 实现生成到common_protobuf模块,然后有选择地将生成的结构重新导出到其预期模块中pub use.

我似乎找不到指定依赖关系的最佳方法。使用

[build-dependencies]
pbrepo = { git="https://github.com/username/pbrepo" }

结果是

Caused by:
  Could not find Cargo.toml in `/Users/username/.cargo/git/checkouts/pbrepo-33abcde7dddd6356/fdefgd9`

我无法提交Cargo.toml到外部存储库。我考虑过使用 git 子模块或制作系统箱 https://kornel.ski/rust-sys-crate使用子模块和 Cargo.toml,但我更喜欢将构建依赖项放在一个位置,而不必在构建期间同步多个存储库。

我可以在构建脚本中手动下载存储库,并将提交设置为拉入我的build.rs但我再次希望将所有构建依赖项放在一个地方。

是否有一种机制可以实现此目的,或者这是使用远程 protobuf 定义的更好方法?


Cargo 不支持下载非 Rust 依赖项。您唯一可以让 Cargo 下载的东西是 Cargo 包(宽松的“板条箱”)。

即使您添加了一个Cargo.toml到您的非 Rust 存储库,这不会有帮助,因为无法询问要从中读取的依赖项的位置。 Cargo 的依赖机制让你可以依赖建库只是,而不是它的源文件(据我所知;我可能错过了一些东西)。

在运行之前,您必须使用一些单独的过程来下载依赖项(自定义脚本、git 子模块...)cargo build.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将非 Rust 存储库声明为 Rust 项目中的依赖项的最佳方法是什么? 的相关文章

随机推荐