Другой вопрос был назван дубликатом этого:
В C ++ почему результат cout << x
отличается от значения, которое показывает отладчик для x
?
x
в вопросе - это переменная float
.
Одним из примеров может быть
float x = 9.9F;
Отладчик показывает 9.89999962
, вывод работы cout
- 9.9
.
Ответ оказывается, что точность cout
по умолчанию для float
равна 6, поэтому она округляется до шести десятичных цифры
См. здесь для справки
Существует несколько способов моделирования того, что вы хотите:
Примеры и тесты построены с помощью 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
Зависимости могут быть сделаны опционально , поэтому другим ящикам, которые зависят от вашей библиотеки conformal
, не потребуется их загружать.
Начиная с Rust 1.17, бинарные файлы могут объявить, что они требуют некоторых дополнительных функций, которые должны быть включены, что делает эти библиотеки «необходимыми только для двоичных файлов».
# 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
Вы можете делать любое управление зависимостями, которое вам нравится, когда библиотека и двоичный файл отдельные пакеты.
# 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"
В наши дни это, вероятно, лучше всего разрешено с рабочими пространствами [ 1 , 2 ].
Структура каталогов выглядит следующим образом:
project-root
├── Cargo.lock
├── Cargo.toml
├── yourlibary
│ ├── Cargo.toml
│ └── src
│ └── lib.rs
├── src
│ └── main.rs
└── target
Файл верхнего уровня Cargo.toml
:
[package]
name = "yourprogram"
version = "0.1.0"
authors = ["You <you@example.com>"]
[workspace]
[dependencies]
yourlibrary = { path = "yourlibrary" }
yourlibrary
Cargo.toml
файл:
[package]
name = "yourlibrary"
version = "0.1.0"
authors = ["You <you@example.com>"]
[dependencies]
Файл Cargo.lock
поскольку каталог target
находится в корневом каталоге проекта и разделяется всеми компонентами в рабочей области. Компоненты рабочей области выводятся автоматически из зависимостей с locak path, но также могут быть указаны вручную.
Каждый компонент с файлом Cargo.toml
может быть опубликован отдельно на crates.io