Я хотел бы сделать проект с a daemon
и a client
, подключаясь через сокет unix.
A client
и a daemon
требуют двух двоичных файлов, так как мне сказать, что Cargo
нужно создать две цели из двух разных источников?
Чтобы добавить немного фантазии, я хотел бы иметь a library
для основной части daemon
, и просто иметь двоичный файл, чтобы обернуть его и общаться через сокеты.
Итак, у нас есть такая древовидная архитектура:
├── Cargo.toml
├── target
| └── debug
| ├── daemon
│ └── client
└── src
├── daemon
│ ├── bin
│ │ └── main.rs
│ └── lib
│ └── lib.rs
└── client
└── bin
└── main.rs
Я мог бы сделать один исполняемый файл, который управляет обоими проблемами, но это не то, что я хочу делать, если это не очень хорошая практика.
rust
rust-cargo
RallionRl
источник
источник
Ответы:
Вы можете указать несколько двоичных файлов, используя
[[bin]]
, как упоминалось здесь :[[bin]] name = "daemon" path = "src/daemon/bin/main.rs" [[bin]] name = "client" path = "src/client/bin/main.rs"
Совет: если вы вместо этого поместите эти файлы в
src/bin/daemon.rs
иsrc/bin/client.rs
, вы получите два исполняемых файла с именами,daemon
иclient
поскольку Cargosrc/bin
автоматически компилирует все файлы в исполняемые файлы с тем же именем. Вам нужно указать имена и пути, как в приведенном выше фрагменте, только если вы не следуете этому соглашению.источник
target/debug/$name
месте,$name
котороеname
вы указали в Cargo.toml.cargo install
команду. Попробуйте прочитать выводcargo help install
.Другой способ - использовать функцию рабочего пространства . Это обеспечит большую гибкость благодаря тому, что у нас может быть более одной библиотеки. Пример структуры проекта:
Содержимое рута
Cargo.toml
:[workspace] members = ["cli", "core", "daemon", "gui", "rpc"]
источник
[[bin]]
. Не могли бы вы подробнее рассказать о том, что вы сделали, чтобы это заработало? Я получал следующую ошибку:use ::engine::RuleEngine;
could not find engine in {{root}}
Другой формат может заключаться в воспроизведении того, что сделал исходный код Crates.io , если у вас масштабный проект, например:
Основная библиотека в src с папкой Bin с вашими исполняемыми файлами. Затем сделайте вызовы вашего основного ящика библиотеки из ваших исполняемых файлов.
Таким образом, ваша библиотека станет централизованной, и вам будет проще находить нужные вещи, когда они кешируются.
источник