我有一个包含二进制文件和库的板条箱。这个库在依赖性方面非常轻,而二进制文件需要更多的依赖性,例如加载文件或做作用域并行的事情。
目前,我的Cargo.toml设置如下:
[dependencies.kdtree]
path = "../kdtree"
[dependencies]
rand="0.3.0"
rustc-serialize = "0.3"
csv = {git = "https://github.com/BurntSushi/rust-csv.git"}
crossbeam = "0.2"
num_cpus = "0.2"
[lib]
name = "conformal"
path = "src/lib.rs"
[[bin]]
name = "ucitest"
path = "src/bin/main.rs"
库需要的唯一依赖项是kdtree
和rand
。然而,看起来即使您只构建了库,它也会构建仅二进制的依赖项。我试过使用features
和其他技巧,如[[bin].dependencies]
或[ucitest-dependencies]
(或在[[bin]]
下添加一个dependencies= []
行),我认为这可能使它们只为二进制文件构建,但我找不到方法。
这些依赖性还不足以使这成为一个问题,但它困扰着我。有没有一种方法可以缩小依赖关系,使它们只为特定的二进制文件构建?
3条答案
按热度按时间ntjbwcob1#
有几种方法可以模拟您想要的内容:
1)将二进制文件转换为示例
示例和测试都是用
dev-dependencies
构建的,因此您可以将这些依赖项移到本节中。图书馆不会依赖他们。要运行二进制文件,请使用用途:
2)可选依赖,包含所需特性
可以将扩展设置为可选的,这样其他依赖于
conformal
库的crate就不需要下载它们。从Rust 1.17开始,二进制文件可以声明它们需要打开某些可选功能,有效地使这些库“仅用于二进制文件”。
请注意,在构建二进制文件时,您需要手动传递
--features build-binary
:3)将二进制文件作为自己的包
当库和二进制文件是独立的包时,您可以做任何您喜欢的依赖项管理。
7kqas0il2#
目前,这可能是最好的解决方法,使用[1,2 ]。
目录结构如下:
顶级
Cargo.toml
文件:yourlibrary
Cargo.toml
文件:Cargo.lock
文件以及target
目录位于项目根目录下,并由工作区中的所有组件共享。工作区组件是从具有locak路径的依赖项自动推断的,但也可以手动指定。每个组件及其
Cargo.toml
文件仍然可以在crates.io上单独发布fnx2tebb3#
这是not implemented yet in Cargo。