锈包与库和二进制?

我想制作一个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.rsmain.rs放在源文件夹中。 没有冲突 ,货物将build立两个东西。

要解决documentaion冲突添加到您的Cargo.toml

 [[bin]] name = "main" doc = false