我想用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)
我可以制作一个管理这两个问题的可执行文件,但这不是我想要做的,除非这是非常好的做法.
我使用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_main中my_binary/src/main.rs)?
我试图这样做,但不知道如何从一个单独的文件my_test拨打电话function_from_main.
我已将库作为子模块包含在我的程序中。结构如下:
\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\nRun Code Online (Sandbox Code Playgroud)\n\n在我的程序Cargo.toml文件中,我添加了以下答案的依赖项:
[dependencies]\nmy_lib = { path = "./my_lib" }\nRun Code Online (Sandbox Code Playgroud)\n\n然而我无法在我的程序中使用这个库,我对 Rust 有点陌生,这个导入系统让我感到非常困惑。我已经尝试过这个main.rs:
[dependencies]\nmy_lib = { path = "./my_lib" }\nRun Code Online (Sandbox Code Playgroud)\n\n但我收到unresolved import \'my_lib\'错误。
现在我有一个有三个成员的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 run在foo/子目录中运行)?我也会接受使根箱不是虚拟的答案(即添加[package]密钥).
我项目的路径结构如下:
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.rs从crypto_bench.rs长椅文件夹中使用?
我已经尝试了各种变化extern crate,mod,super和use。我可以在网上找到的所有示例都是针对带有的图书馆项目,lib.rs并且在将带有main.rs文件的项目使用时,这些“导入”不起作用。
我想创建一个包含两个二进制板条箱和一个包含共享代码的库的 Rust 包。我知道如何通过将二进制文件的源文件放在子目录src/bin/(例如src/bin/firstbin.rs和src/bin/secondbin.rs)中并将库代码放在src/或 中来对一个简单的程序执行此操作src/lib/。
但是,如果二进制文件具有大量不属于库的非共享代码,并且我想将其源代码拆分为多个文件,则我不确定如何布局源文件。我正在考虑src/bin/firstbin/只属于第一个二进制文件和src/bin/secondbin/第二个二进制文件的文件。但是,我不确定如何从firstbin.rs和引用这些文件secondbin.rs。
那么这是正确的方法吗?如果是,我如何引用这些文件?如果不是,最好的布局是什么?
我正在尝试从另一个模块调用属于某个模块的函数(用于代码分解、组织等)。
这是我的箱子结构:
? 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::main的bin/one.rs?use crate::lib::two;, use super::lib::two;, 都没有use self::super::lib::two;添加到bin/one.rs工作中。 …
如何在一个项目中创建库和可执行文件?我只想在处理它时测试我的库并且使用测试并不总是最好的方法.我相信我必须使用[lib],[???]但我没有在crates.io找到有关它的信息.
我有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 foo以main.rs解决此问题。但是我不明白这一点,给我的印象lib.rs是,这个地方“暴露”了我所有的模块?为什么也必须在其中声明模块main.rs?
我的Cargo.toml:
pub mod foo;
pub mod bar;
Run Code Online (Sandbox Code Playgroud) 过去有很多类似的帖子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) 是否可以更改名称main.rs并仍然具有cargo run工作之类的命令?
如果可能的话,有人可以给我一个如何让cargo run目标说的例子example.rs吗?
我有一个前端项目,在src文件夹中有很多东西,我有机会在服务器端使用Rust.我的所有Rust服务器文件都在server文件夹中; 我怎么能告诉Cargo运行./server/app.rs?
我在学习如何访问模块时陷入困境。我正在尝试插入除 之外的文件src夹src。它不起作用并且给了我一个错误。这是我的项目树。
$ 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 文档。