我有一个项目,由 workspace 中的两个板条箱组成,其中一个
crate-sys
生成一些绑定。另一个,crate
使用 crate-sys
并在其之上构建适当的 Rust API。
在顶级 git 项目(工作区)上,我配置了一个 gitsubmole,它下载原始代码来构建绑定(对于 crate-sys
)。它将代码下载到 vendor
板条箱内的 crate-sys
文件夹中。
[Workspace]
- crate-sys
- vendor
- crate
现在问题来了: 如何将
crate-sys
发布到 crates.io,以便它也下载 vendor
代码?由于子模块信息来自工作区 git root 而不是板条箱本身?
cargo publish
不会检查是否有子模块。它只会包含当前板条箱(实际上是包?)文件夹下的所有文件,除了 target/
之外。
这很好,因为板条箱应该包含编译所需的所有源代码,并且不需要任何额外的下载。
但是,在某些情况下,cargo 确实会排除子文件夹(例如,如果它们包含
Cargo.toml
),因此如果有疑问,您可以构建 .crate
文件并在发布之前检查其内容。
cargo package --allow-dirty # This won't publish, just create the .crate file
tar xvf ../target/package/*.crate