[英]error[E0601]: `main` function not found in crate for utilitary file for a custom binary
我有一个名为cli.rs
的自定义二进制文件和一个文件clap.rs
,其中包含一些用于clap.rs
实用程序:
src
bin
cli.rs
clap.rs
其中 clap.rs 只是为我提供了 clap 定义:
pub fn get_matches() -> ArgMatches {
}
fn main() {}
所以我可以将它们导入cli.rs
。
但是,如果我从clap.rs
取出fn main
,我会得到
error[E0601]: `main` function not found in crate `clap`
我不希望clap.rs
有一个 main 函数,我只是希望它只是一个二进制cli.rs
的 utils 文件
从关于包裹布局的货物书:
Cargo 使用文件放置约定,以便于深入了解新的 Cargo 包:
. // ... ├── src/ | | // ... │ └── bin/ │ ├── named-executable.rs │ ├── another-executable.rs │ └── multi-file-executable/ │ ├── main.rs │ └── some_module.rs | // ...
- [...]
- 默认的可执行文件是 src/main.rs。
- 其他可执行文件可以放在 src/bin/ 中。
- [...]
如果二进制、示例、基准或集成测试由多个源文件组成,请将
main.rs
文件与额外的模块放在src/bin
、examples
、benches
或tests
目录的子目录中。 可执行文件的名称将是目录名称。
通过将cli.rs
和clap.rs
放入bin/
,你告诉 Cargo 你有两个二进制文件:一个名为cli
,一个名为clap
。
这个包布局应该适合你:
src
bin
cli
main.rs (that's your cli.rs)
clap.rs
或者,您也可以将clap.rs
放入 lib crate 中(将其放入lib/
,然后将pub mod clap;
放入lib.rs
)。 但是请注意,您随后需要将get_matches()
引用为<your_package_name>::clap::get_matches()
以便编译器知道您不是从二进制包中引用某些内容,而是从库包中引用某些内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.