有几种方法可以模拟您想要的内容:
1)将二进制文件转换为示例
示例和测试是由dev-dependencies
构建的,因此您可以将这些依赖项移入此部分。该库不会依赖它们。
conformal/
Cargo.toml
src/
lib.rs
examples/
ucitest.rs
[dependencies]
kdtree = { path = "../kdtree" }
rand = "0.3"
[dev-dependencies]
serde = "1"
csv = "0.15"
crossbeam = "0.3"
num_cpus = "1"
[lib]
name = "conformal"
[[example]]
name = "ucitest"
运行二进制文件,使用以下命令:
cargo run --example ucitest
2) 带有必需特性的可选依赖项
依赖项可以被标记为可选的,这样依赖于您的conformal
库的其他crate就不需要下载它们。
从 Rust 1.17 开始,二进制文件可以声明它们需要打开某些可选功能,从而使那些库“仅对二进制文件需要”必需。
[dependencies]
kdtree = { path = "../kdtree" }
rand = "0.3"
serde = { version = "1", optional = true }
csv = { version = "0.15", optional = true }
crossbeam = { version = "0.3", optional = true }
num_cpus = { version = "1", optional = true }
[lib]
name = "conformal"
[features]
build-binary = ["serde", "csv", "crossbeam", "num_cpus"]
[[bin]]
name = "ucitest"
required-features = ["build-binary"]
请注意,在构建二进制文件时需要手动添加--features build-binary
:
cargo run --features build-binary --bin ucitest
3) 将可执行文件制作为独立的包
当库和可执行文件分别作为独立的包时,您可以自由进行依赖管理。
conformal/
Cargo.toml
src/
lib.rs
ucitest/
Cargo.toml
src/
main.rs
[dependencies]
conformal = { version = "0.1", path = "../" }
serde = "1"
csv = "0.15"
crossbeam = "0.3"
num_cpus = "1"
Cargo.toml
文件?你可以把二进制文件放在一个子目录中,在父目录(或已发布的版本)中使用库。 - Shepmaster