Ответ 1
Существует несколько способов моделирования того, что вы хотите:
1) Поверните двоичные файлы к примерам
Examples, а тесты построены с помощью dev-dependencies
, поэтому вы можете перенести эти зависимости в этот раздел. Библиотека не будет зависеть от них.
# File structure
conformal/
Cargo.toml
src/
lib.rs
examples/ # <-- the `ucitest` is
ucitest.rs # <-- moved to here
# Cargo.toml
[dependencies]
kdtree = { path = "../kdtree" }
rand = "0.3"
[dev-dependencies] # <-- move the examples-only dependencies here
serde = "1"
csv = "0.15"
crossbeam = "0.3"
num_cpus = "1"
[lib]
name = "conformal"
[[example]] # <--- declare the executable
name = "ucitest" # <--- as an example
Чтобы запустить двоичный файл, используйте:
cargo run --example ucitest
2) Дополнительные зависимости с требуемыми функциями
Зависимости могут быть сделаны опционально, поэтому другие ящики, зависящие от вашей библиотеки conformal
, не будут загружать их.
Начиная с Rust 1.17, двоичные файлы могут объявлять require некоторые дополнительные функции, которые необходимо включить, что фактически делает эти библиотеки "необходимыми только для двоичные файлы".
# Cargo.toml
[dependencies]
kdtree = { path = "../kdtree" }
rand = "0.3"
serde = { version = "1", optional = true } # <-- make
csv = { version = "0.15", optional = true } # <-- all of
crossbeam = { version = "0.3", optional = true } # <-- them
num_cpus = { version = "1", optional = true } # <-- optional
[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) Сделайте двоичные файлы как собственный пакет
Вы можете делать любое управление зависимостями, которое вам нравится, когда библиотека и двоичные файлы являются отдельными пакетами.
# File structure
conformal/
Cargo.toml
src/
lib.rs
ucitest/ # <-- move ucitest
Cargo.toml # <-- into its own
src/ # <-- package.
main.rs
# ucitest/Cargo.toml
[dependencies]
conformal = { version = "0.1", path = "../" } # <-- explicitly depend on the library
serde = "1"
csv = "0.15"
crossbeam = "0.3"
num_cpus = "1"