如果 main.rs 位于工作区中的同一个 crate 中且包名称等于 bin 名称,则无法添加对 lib.rs 的依赖项

J. *_*Doe 1 rust rust-cargo

我得到了这个货物 toml 文件:

[package]
edition.workspace = true
name = "batch_jobs"
version.workspace = true

[[bin]]
name = "batch_jobs"
path = "src/main.rs"

[lib]
name = "batch_jobs_lib"
path = "src/lib.rs"
Run Code Online (Sandbox Code Playgroud)

在另一个板条箱中,我想添加对batch_jobs_lib. 我无法这样做。货物抱怨找不到板条箱。当我更改该部分的命名时[[bin]],它可以正常工作,但我只是想知道这段代码出了什么问题。

在同一工作区的另一个板条箱中,我尝试像这样声明依赖项:

batch_jobs_lib = { path = "../batch_jobs" }
Run Code Online (Sandbox Code Playgroud)

我收到此错误:error: no matching package named batch_jobs_lib found

使用此代码时,我无法访问该库的代码:

batch_jobs = { path = "../batch_jobs" }
Run Code Online (Sandbox Code Playgroud)

更糟糕的是,Rust 甚至找不到任何包,但很乐意添加依赖项。

我是否遗漏了某些内容,或者我是否错误配置了我的 toml 文件,这是不允许/不可能的?

caf*_*e25 5

toml 表中的键[dependencies]指的是名称,而不是包名称,在源中则相反。将库箱命名为与包不同的名称是非常不正统的,但仍然是可能的,这意味着您必须在源中以不同的方式引用库Cargo.toml

[dependencies]
batch_jobs = { path = "../batch_jobs" }
Run Code Online (Sandbox Code Playgroud)

并在板条箱的源代码中取决于batch_jobs

use batch_jobs_lib::*;
Run Code Online (Sandbox Code Playgroud)

最好只依赖默认值并省略[lib]的部分batch_jobs/Cargo.toml