繁体   English   中英

错误 [E0601]:在自定义二进制文件的实用文件的 crate 中找不到 `main` 函数

[英]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/binexamplesbenchestests目录的子目录中。 可执行文件的名称将是目录名称。

通过将cli.rsclap.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM