我想制作一个包含可重用库(实现大部分程序)的Rust包,以及使用它的可执行文件.
假设我没有混淆Rust模块系统中的任何语义,我的Cargo.toml文件应该是什么样的?
我想创建一个包含两个二进制板条箱和一个包含共享代码的库的 Rust 包。我知道如何通过将二进制文件的源文件放在子目录src/bin/(例如src/bin/firstbin.rs和src/bin/secondbin.rs)中并将库代码放在src/或 中来对一个简单的程序执行此操作src/lib/。
但是,如果二进制文件具有大量不属于库的非共享代码,并且我想将其源代码拆分为多个文件,则我不确定如何布局源文件。我正在考虑src/bin/firstbin/只属于第一个二进制文件和src/bin/secondbin/第二个二进制文件的文件。但是,我不确定如何从firstbin.rs和引用这些文件secondbin.rs。
那么这是正确的方法吗?如果是,我如何引用这些文件?如果不是,最好的布局是什么?
我注意到为了使一段代码不被归类为死代码,它必须可以从所有二进制文件中访问。例子:
Cargo.toml:
[[bin]]
name = "main_one"
path = "src/main_one.rs"
[[bin]]
name = "main_two"
path = "src/main_two.rs"
main_one.rs:
mod utils;
fn main() {
print!("Hello, ");
utils::function_in_question();
}
main_two.rs:
mod utils;
fn main() {
print!("Hello, ");
// utils::function_in_question();
}
utils.rs:
pub fn function_in_question() {
println!("world!");
}
Run Code Online (Sandbox Code Playgroud)
这报告function_in_question为死代码,即使它可以从main_one.rs. 取消注释可解决此问题。如果它仅存在于main_two.rs.
虽然这种行为背后有一些基本原理,但让 VSCode 一直抱怨这一点是很容易的 + Clippy 的输出被这些警告发送垃圾邮件。是否有至少在全球范围内抑制死代码检测的解决方案?应避免使用货物工作空间重构整个项目。