如何发布具有子模块依赖项的工作区包?

问题描述 投票:0回答:1

我有一个项目,由 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 而不是板条箱本身?

git rust rust-cargo rust-crates
1个回答
2
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.