Укажите зависимости от конкретного контейнера в проекте как с библиотекой, так и с бинарниками [duplicate]

Другой вопрос был назван дубликатом этого:

В C ++ почему результат cout << x отличается от значения, которое показывает отладчик для x ?

x в вопросе - это переменная float.

Одним из примеров может быть

float x = 9.9F;

Отладчик показывает 9.89999962, вывод работы cout - 9.9.

Ответ оказывается, что точность cout по умолчанию для float равна 6, поэтому она округляется до шести десятичных цифры

См. здесь для справки

14
задан LinearZoetrope 29 February 2016 в 23:31
поделиться

2 ответа

Существует несколько способов моделирования того, что вы хотите:


1) Поверните двоичные файлы к примерам

Примеры и тесты построены с помощью 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, бинарные файлы могут объявить, что они требуют некоторых дополнительных функций, которые должны быть включены, что делает эти библиотеки «необходимыми только для двоичных файлов».

# 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"
10
ответ дан kennytm 28 August 2018 в 03:08
поделиться

В наши дни это, вероятно, лучше всего разрешено с рабочими пространствами [ 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

2
ответ дан Shepmaster 28 August 2018 в 03:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: