如何构建 Rust 二进制可执行文件

Lau*_*och 6 executable module rust

我正在尝试构建一个 Rust 二进制可执行文件。在 src 目录中我有四个文件:

主要.rs:

use fasta_multiple_cmp::get_filenames;

fn main() {
    get_filenames();
}
Run Code Online (Sandbox Code Playgroud)

mod.rs:

pub mod fasta_multiple_cmp;

pub mod build_sequences_matrix;
Run Code Online (Sandbox Code Playgroud)

fasta_multiple_cmp.rs:

pub mod fasta_multiple_cmp {

...

    pub fn get_filenames() {
    let args: Vec<String> = env::args().collect();
    ...
Run Code Online (Sandbox Code Playgroud)

build_sequences_matrix.rs:

pub mod build_sequences_matrix {

    use simple_matrix::Matrix;
    ...
Run Code Online (Sandbox Code Playgroud)

货物告诉我:

src/main.rs:3:5 | src/main.rs:3:5 | 3 | 使用 fasta_multiple_cmp::get_filenames; | ^^^^^^^^^^^^^^^^^^^^ 使用未声明的板条箱或模块 `fasta_multiple_cmp

我相信我理解了一些小事情,但我迷失了。到底是怎么回事?

感谢您的任何提示!

anw*_*anw 7

您的原始代码无法正常工作,因为 Rustuse正在寻找要从中导入的包,而不仅仅是同一目录中的文件。

如果要将逻辑分离到其他文件中,则需要将项目分解为二进制文件和库(也称为二进制文件可用于导入的板条箱)。

这可以在您的 as 中完成Cargo.toml

[package]
edition = "2018"
name = "my_project"
version = "1.2.3"

... your other settings ...

[[bin]]
edition = "2018"
name = "whatever_name_for_binary"
path = "src/main.rs"
Run Code Online (Sandbox Code Playgroud)

这意味着您的二进制文件将被编译到target文件夹中名为“whatever_name_for_binary”的文件中。这也意味着您的非二进制文件充当库,并且可以通过使用二进制文件导入use my_project::some_module;

由于您的项目现在将包含库和二进制文件,因此您需要指定何时运行/编译二进制文件。

您可以通过运行以下命令来执行此操作:cargo run --bin whatever_name_for_binary

有关更多信息,请参阅Rust Book 的模块章节