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

vc9ivgsu  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(91)

我拿到了这份货物清单:

[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"

字符串
在另一个crate中,我想添加对batch_jobs_lib的依赖。我无法这样做。Cargo抱怨它找不到crate。当我更改[[bin]]部分的命名时,我让它工作,但我只是想知道这段代码有什么问题。
在同一个工作区的另一个crate中,我试着像这样声明依赖项:

batch_jobs_lib = { path = "../batch_jobs" }


错误代码:error: no matching package named batch_jobs_lib found
当使用此代码时,我无法访问lib的代码:

batch_jobs = { path = "../batch_jobs" }


更糟糕的是,Rust甚至找不到任何包,但很乐意添加依赖项。
我错过了什么,或者我错误地配置了我的toml文件,这是不允许的/可能的?

wi3ka0sx

wi3ka0sx1#

toml表[dependencies]中的键指的是package名称,而不是crate,在源代码中是相反的。如果库crate与package不同,这是非常不正统的,但仍然是可能的,这意味着你必须在源代码中引用库而不是在Cargo.toml中引用库:

[dependencies]
batch_jobs = { path = "../batch_jobs" }

字符串
在机箱的源代码中,

use batch_jobs_lib::*;


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

相关问题