相关疑难解决方法(0)

如何使用Cargo构建多个二进制文件?

我想用a daemon和a 创建一个项目client,通过unix socket连接.

A client和a daemon需要两个二进制文件,那么如何判断Cargo从两个不同的源构建两个目标?

为了增加一些幻想,我希望有一个library主要部分daemon,并且只需要一个二进制文件来包裹它并通过套接字进行通信.

所以,我们有这种树架构:

??? Cargo.toml
??? target
|   ??? debug
|       ??? daemon
?       ??? client
??? src
    ??? daemon
    ?   ??? bin
    ?   ?   ??? main.rs
    ?   ??? lib
    ?       ??? lib.rs
    ??? client
        ??? bin
            ??? main.rs
Run Code Online (Sandbox Code Playgroud)

我可以制作一个管理这两个问题的可执行文件,但这不是我想要做的,除非这是非常好的做法.

rust rust-cargo

58
推荐指数
2
解决办法
1万
查看次数

如何在Rust的Cargo中将测试移动到单独的二进制文件中?

我使用Cargo创建了一个新的二进制文件:

cargo new my_binary --bin
Run Code Online (Sandbox Code Playgroud)

函数my_binary/src/main.rs可以用于测试:

fn function_from_main() {
    println!("Test OK");
}

#[test]
fn my_test() {
    function_from_main();
}
Run Code Online (Sandbox Code Playgroud)

cargo test -- --nocapture如预期运行测试.

什么是本次测试移动到一个单独的文件,(保持最直接的方法function_from_mainmy_binary/src/main.rs)?

我试图这样做,但不知道如何从一个单独的文件my_test拨打电话function_from_main.

testing rust rust-cargo

10
推荐指数
2
解决办法
4388
查看次数

从带有 main.rs 文件的本地包导入时未解决导入问题

我已将库作为子模块包含在我的程序中。结构如下:

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 my_lib/\n     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Cargo.toml\n     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src/\n          \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lib/\n               \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 mod.rs\n               \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 foo.rs\n          \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.rs\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src/\n     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.rs\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Cargo.toml\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我的程序Cargo.toml文件中,我添加了以下答案的依赖项:

\n\n
[dependencies]\nmy_lib = { path = "./my_lib" }\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而我无法在我的程序中使用这个库,我对 Rust 有点陌生,这个导入系统让我感到非常困惑。我已经尝试过这个main.rs

\n\n
[dependencies]\nmy_lib = { path = "./my_lib" }\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我收到unresolved import \'my_lib\'错误。

\n

rust rust-crates rust-cargo

9
推荐指数
1
解决办法
2万
查看次数

如何在货物工作区的根目录中指定默认运行的"货运"?

现在我有一个有三个成员的Cargo工作区.

[workspace]
members = [
    "foo",
    "bar",
    "baz",
]
Run Code Online (Sandbox Code Playgroud)

如果我cargo run在根目录中运行,我收到此错误:

错误:清单路径/home/lukas/dev/mahboi/Cargo.toml是虚拟清单,但此命令需要针对此工作空间中的实际包运行

那讲得通.我可以跑cargo run -p foo,它的工作原理.但问题是:foo是唯一可执行的包,我会经常执行它,所以如果我可以运行cargo run并执行它会很好.

我试图使用default-members密钥,但这没有帮助:

default-members = ["foo"]
Run Code Online (Sandbox Code Playgroud)

是否有另一种方法告诉Cargo cargo run应该执行foocrate(相当于cargo runfoo/子目录中运行)?我也会接受使根箱不是虚拟的答案(即添加[package]密钥).

rust rust-cargo

8
推荐指数
1
解决办法
1401
查看次数

如何在二进制项目的src文件夹外部使用模块,例如用于集成测试或基准测试?

我项目的路径结构如下:

demo
??? benches
?   ??? crypto_bench.rs
??? src
?   ??? main.rs
?   ??? crypto.rs
??? Cargo.lock
??? Cargo.toml
Run Code Online (Sandbox Code Playgroud)

crypto.rs包含Crypto带有实现的结构。 crypto.rs通过main.rs使用引用mod crypto;

如何crypto.rscrypto_bench.rs长椅文件夹中使用?

我已经尝试了各种变化extern cratemodsuperuse。我可以在网上找到的所有示例都是针对带有的图书馆项目,lib.rs并且在将带有main.rs文件的项目使用时,这些“导入”不起作用。

rust

6
推荐指数
1
解决办法
1146
查看次数

库箱中多个可执行文件的文件布局

我想创建一个包含两个二进制板条箱和一个包含共享代码的库的 Rust 包。我知道如何通过将二进制文件的源文件放在子目录src/bin/(例如src/bin/firstbin.rssrc/bin/secondbin.rs)中并将库代码放在src/或 中来对一个简单的程序执行此操作src/lib/

但是,如果二进制文件具有大量不属于库的非共享代码,并且我想将其源代码拆分为多个文件,则我不确定如何布局源文件。我正在考虑src/bin/firstbin/只属于第一个二进制文件和src/bin/secondbin/第二个二进制文件的文件。但是,我不确定如何从firstbin.rs和引用这些文件secondbin.rs

那么这是正确的方法吗?如果是,我如何引用这些文件?如果不是,最好的布局是什么?

rust rust-cargo

6
推荐指数
1
解决办法
6624
查看次数

Rust 中的跨模块函数调用

我正在尝试从另一个模块调用属于某个模块的函数(用于代码分解、组织)。

这是我的箱子结构:

?  mod_test git:(master) ? tree
.
??? Cargo.lock
??? Cargo.toml
??? src
    ??? bin
    ?   ??? one.rs
    ??? lib
    ?   ??? two.rs
    ??? main.rs

3 directories, 5 files
Run Code Online (Sandbox Code Playgroud)

main我声明:

pub mod bin {
    pub mod one;
}
pub mod lib {
    pub mod two;
}
Run Code Online (Sandbox Code Playgroud)

所有这些文件只包含一个微不足道的 pub fn main() {println!("hello");}.

此时,一切正常

现在,是它可以调用lib::two::mainbin/one.rs

use crate::lib::two;, use super::lib::two;, 都没有use self::super::lib::two;添加到bin/one.rs工作中。 …

module code-organization rust rust-crates

6
推荐指数
1
解决办法
941
查看次数

在单个项目中创建库和可执行文件

如何在一个项目中创建库和可执行文件?我只想在处理它时测试我的库并且使用测试并不总是最好的方法.我相信我必须使用[lib],[???]但我没有在crates.io找到有关它的信息.

rust

5
推荐指数
1
解决办法
673
查看次数

当存在main.rs和lib.rs时,Rust模块混乱

我有4个文件:

main.rs

mod bar;

fn main() {
    let v = vec![1, 2, 3];
    println!("Hello, world!");
}
Run Code Online (Sandbox Code Playgroud)

lib.rs

pub mod foo;
pub mod bar;

Run Code Online (Sandbox Code Playgroud)

foo.rs

pub fn say_foo() {

}

Run Code Online (Sandbox Code Playgroud)

bar.rs

use crate::foo;

fn bar() {
    foo::say_foo();
}

Run Code Online (Sandbox Code Playgroud)

运行时cargo run出现错误消息:

mod bar;

fn main() {
    let v = vec![1, 2, 3];
    println!("Hello, world!");
}
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释如何解决此问题吗?更广泛地说:当存在a main.rs和a 时,模块查找如何工作lib.rs?我觉得很混乱

编辑:添加mod foomain.rs解决此问题。但是我不明白这一点,给我的印象lib.rs是,这个地方“暴露”了我所有的模块?为什么也必须在其中声明模块main.rs

我的Cargo.toml

pub mod foo;
pub mod bar;

Run Code Online (Sandbox Code Playgroud)

module rust

5
推荐指数
3
解决办法
551
查看次数

如何为 Rust 二进制板条箱编写回归测试?

过去有很多类似的帖子1 2 3 4但它们似乎都已经过时或无关紧要。

我的问题是:如何为 Rust 二进制文件编写回归测试?

我可以在我的文件中将它们设置为“单元测试” src/main.rs,但这很烦人。理想情况下,它将设置为

root
|---src
    |---main.rs
    |---foo.rs
    |---bar.rs
|---tests
    |---regress1.rs
    |---regress2.rs
Run Code Online (Sandbox Code Playgroud)

testing rust

2
推荐指数
1
解决办法
412
查看次数

重命名 main.rs 并与货物一起使用

是否可以更改名称main.rs并仍然具有cargo run工作之类的命令?

如果可能的话,有人可以给我一个如何让cargo run目标说的例子example.rs吗?

rust rust-cargo

1
推荐指数
1
解决办法
884
查看次数

如何告诉Cargo从"src"以外的目录运行文件?

我有一个前端项目,在src文件夹中有很多东西,我有机会在服务器端使用Rust.我的所有Rust服务器文件都在server文件夹中; 我怎么能告诉Cargo运行./server/app.rs

rust rust-cargo

0
推荐指数
1
解决办法
1246
查看次数

如何从`src`目录之外的目录导入模块?

我在学习如何访问模块时陷入困境。我正在尝试插入除 之外的文件srcsrc。它不起作用并且给了我一个错误。这是我的项目树。

$ Project1
.
|-- src
|       |-- main.rs
|   |--FolderinSrcFolder 
|       |--folderinsrcmodule.rs    
|
|--anothersrc
|   |--mod.rs
|
|-- rootmodule.rs
|-- Cargo.toml
|-- Cargo.lock
Run Code Online (Sandbox Code Playgroud)

我怎样才能访问anothersrc/mod.rs src/main.rs?我如何rootmodule.rs访问src/main.rs

我已经阅读了 Rust 文档。

module rust rust-cargo

0
推荐指数
1
解决办法
2528
查看次数