锈包与库和二进制?
我想制作一个Rust包,它包含一个可重用的库(大部分程序都是在这个库中实现的),还有一个使用它的可执行文件。
假设我没有混淆Rust模块系统中的任何语义,我的Cargo.toml
文件应该是什么样的?
Tok:tmp doug $ du -a
8 ./Cargo.toml 8 ./src/bin.rs 8 ./src/lib.rs 16 ./src
Cargo.toml:
[package] name = "mything" version = "0.0.1" authors = ["me <me@gmail.com>"] [lib] name = "mylib" path = "src/lib.rs" [[bin]] name = "mybin" path = "src/bin.rs"
SRC / lib.rs:
pub fn test() { println!("Test"); }
SRC / bin.rs:
extern crate mylib; use mylib::test; pub fn main() { test(); }
你也可以将二进制源放在src/bin
,其余的源放在src
。 你可以在我的项目中看到一个例子。 根本不需要修改你的Cargo.toml
,每个源文件都会被编译成一个同名的二进制文件。
另一个答案的configuration被replace为:
$ tree . ├── Cargo.toml └── src ├── bin │ └── mybin.rs └── lib.rs $ cat Cargo.toml [package] name = "example" version = "0.0.1" authors = ["An Devloper <an.devloper@example.com>"]
SRC / lib.rs
use std::error::Error; pub fn really_complicated_code(a: u8, b: u8) -> Result<u8, Box<Error>> { Ok(a + b) }
SRC /斌/ mybin.rs
extern crate example; fn main() { println!("I'm using the library: {:?}", example::really_complicated_code(1, 2)); }
并执行它:
$ cargo run --bin mybin I'm using the library: Ok(3)
另外,你可以创build一个src/main.rs
作为事实上的可执行文件。 不幸的是,这与cargo doc
命令冲突:
无法logging库和二进制文件名称相同的软件包。 考虑重命名一个或将目标标记为
doc = false
你可以把lib.rs
和main.rs
放在源文件夹中。 没有冲突 ,货物将build立两个东西。
要解决documentaion冲突添加到您的Cargo.toml
:
[[bin]] name = "main" doc = false