我在一个ssh友好的实验室机器上有一个帐户,我存储了很多私人项目,所以我可以从多台计算机访问它们(它允许我只使用我的几个私人Github存储库来处理多个人将要处理的事情).
Rust似乎很有能力通过使用像这样的东西来获取本地和公共数据
[dependencies.foo]
git = "https://github.com/bar/foo"
[dependencies.baz]
path = "/path/to/baz"
Run Code Online (Sandbox Code Playgroud)
但我还没有找到一种方法让它使用ssh git工作(例如git = "git@github.com:bar/foo",或者在我的情况下labmachine:bar/foo).我有无密码/ keygen ssh设置,如果这有帮助.
如果不存在,这不是什么大问题.目前我只是手动克隆存储库和使用path = ../foo,只要我保持我的目录结构相同,并记住pull在我的所有机器上手动所有依赖项.但是,如果我可以设置Cargo来做这件事会让事情变得容易多了,特别是如果我只需要在我的笔记本电脑上快速演示一些东西.
我有一个包含一些相关资产(Lua脚本)的项目,我需要在运行时找到它.这可能意味着两件事:
cargo run),我想找到它相对于源cargo install,资产也应该安装在某个地方,并且已安装的可执行文件版本应该找到已安装的资产.我知道使用类似的方法include_str!()将文本文件编译成二进制文件,但在这种情况下我不想这样做.
据我所知,cargo install 目前没有任何支持安装除可执行文件之外的任何东西,这是第一个问题,尽管我不介意有一个包装器安装脚本来帮助.
有些项目包括多个包,这使得在每个包中手动运行所有测试变得麻烦.
是否有一种方便的递归运行方式cargo test?
我有这个文件结构
\n\nTest\n\xe2\x94\x82 .gitignore\n\xe2\x94\x82 build.rs\n\xe2\x94\x82 Cargo.toml\n\xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80.vscode\n\xe2\x94\x82 tasks.json\n\xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80src\n\xe2\x94\x82 main.rs\nRun Code Online (Sandbox Code Playgroud)\n\n我有这个 Cargo.toml
\n\n[package]\nname = "test"\nversion = "0.1.0"\nauthors = ["xtricman"]\nedition = "2018"\n\n# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html\n\n[dependencies]\nregex = "*"\nRun Code Online (Sandbox Code Playgroud)\n\n我有这个 build.rs
\n\nfn main() {\n let mt = regex::Regex::new(r"_[1-9][0-9]+.rs|_0.rs\\z").unwrap().find("gdf_980.rs");\n let mts = if mt.is_some() {\n println!("{}", mt.unwrap().as_str());\n } else {\n println!("None");\n };\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我想在构建脚本中使用正则表达式板条箱,但出现编译错误
\n\n[package]\nname = "test"\nversion = "0.1.0"\nauthors = ["xtricman"]\nedition = "2018"\n\n# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html\n\n[dependencies]\nregex = "*"\nRun Code Online (Sandbox Code Playgroud)\n\nCargo 只支持 …
default 是否可以使功能列表依赖于您的平台Cargo.toml?我想使用功能来选择依赖于平台的依赖项。
我会想象这样的事情:
[features]
# on Unix
default = ["feature-a"]
# not on Unix
default = ["feature-b"]
feature-a = ["dep-a"]
feature-b = ["dep-b"]
[dependencies]
dep-a = { version = "*", optional = true }
dep-b = { version = "*", optional = true }
Run Code Online (Sandbox Code Playgroud)
我试过了:
使用[target.'cfg(unix)'.features]不起作用,它被忽略:
[target.'cfg(unix)'.features]
default = ["feature-a"]
# -- snip --
Run Code Online (Sandbox Code Playgroud)
使用build.rs脚本根据cfg条件启用功能只能部分起作用。依赖关系解析是在运行之前完成的build.rs,因此这不会导入其中启用的功能的可选依赖关系。此示例不会导入dep-a:
fn main() {
#[cfg(unix)]
println!("cargo:rustc-cfg=feature=\"feature-a\"");
// -- snip --
}
Run Code Online (Sandbox Code Playgroud)
这可以在 Rust …
使用 创建新项目时cargo new,我希望 Cargo.toml 文件自动包含预定义authors字段。
Rust书中说:
接下来的四行设置 Cargo 编译程序所需的配置信息:名称、版本、编写者以及要使用的 Rust 版本。Cargo 从您的环境中获取您的姓名和电子邮件信息,因此如果该信息不正确,请立即修复信息,然后保存文件。
实在是太模糊了,所以我就去查了一下。首先,我尝试将CARGO_NAME和添加CARGO_EMAIL到我的环境变量中。没用。
然后我尝试在配置文件的字段中添加变量name和,并得知它已被弃用。email[cargo-new].cargo/config.toml
还有其他方法可以做到这一点吗?我做错什么了吗?
[package]
name = "hello_world"
version = "0.1.0"
edition = "2018"
authors = ["foo <bar@gmail.com>"] # Add this line automatically
[dependencies]
Run Code Online (Sandbox Code Playgroud)
我在 Arch Linux 上使用工具链rustup。nightly
当我想测试 C++ 覆盖率时,我可以使用 构建我的程序-fprofile-arcs -ftest-coverage,运行所有测试,然后运行gcov以获得覆盖率。
然而,当谈到 Rust 时,我完全迷失了。我想要做的是运行以下测试(在我的 Mac 上),并覆盖路径中的所有 Rust 代码components/raftstore
cargo test --package tests --test failpoints cases::test_normal
cargo test --package tests --test failpoints cases::test_bootstrap
cargo test --package tests --test failpoints cases::test_compact_log
Run Code Online (Sandbox Code Playgroud)
从这篇文章来看,它说先运行cargo test --no-run,然后运行kcov。然而,当我真正这样做时,kcov 会永远阻塞。
然后我找到了一个叫“谁提供”的东西 。但是,当我像我所做的那样运行时,我收到错误cargo kcov--testcargo kcov --test failpoints cases::test_normalcargo test
error: cargo subcommand failure
note: cargo test exited with code exit status: 101
error: no test target named `failpoints` …Run Code Online (Sandbox Code Playgroud) 我需要在程序运行时出现恐慌并且不关闭程序。例如,如何在这里捕获恐慌并打印 \xe2\x80\x9cHello, World\xe2\x80\x9d?:
\nfn main() {\n let v = vec![1, 2, 3];\n\n v[99];\n println!("Hello, World");\n}\nRun Code Online (Sandbox Code Playgroud)\n 我目前正在与Rust和Cargo合作开展一个项目.它运行良好,但我遇到一个小问题:对于代码重用,我的大多数项目都在lib crate中.在这个箱子里,很多东西都是私人的.所以当我这样做的时候cargo doc,我只有公共的,出口的东西的文件......这实际上很棒,因为很容易看出什么是出口的,什么不是.
但我不得不承认:我错过了整个项目的完整文档,用于开发目的......
有没有办法立即运行Cargo构建的程序gdb?cargo有很多功能,可以运行程序,所以看起来似乎有道理.
预期的命令就像是cargo debug.
rust ×10
rust-cargo ×10
debugging ×1
gdb ×1
kcov ×1
lldb ×1
rustup ×1
testing ×1
unit-testing ×1