我有一个失败的货物测试:
$ cargo test
[snip]
Running target/gunzip-c62d8688496249d8
running 2 tests
test test_extract_failure ... FAILED
test test_extract_success ... ok
failures:
---- test_extract_failure stdout ----
task 'test_extract_failure' panicked at 'assertion failed: result.is_err()', /home/dhardy/other/flate2-rs/tests/gunzip.rs:19
failures:
test_extract_failure
test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured
task '<main>' panicked at 'Some tests failed', /home/rustbuild/src/rust-buildbot/slave/nightly-linux/build/src/libtest/lib.rs:250
Run Code Online (Sandbox Code Playgroud)
如何在GDB之类的调试器中启动失败测试?
这应该是一个普遍的问题,但对于那些想要回溯我的步骤的人来说,安装一个最近的每晚Rust构建和:
git clone https://github.com/dhardy/flate2-rs.git
git checkout 24979640a880
cd flate2-rs
cargo test
Run Code Online (Sandbox Code Playgroud) 具有高级编程语言的经验。我读了 Rust 这本书,现在试图生存并理解 Rust 中的“事物”是如何工作的。我希望有人解释一下到底是什么 - Ok(()) 以及如何处理它?我的目标是将函数的结果返回到输出的变量:
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target/debug/rcp ./file/ aba`
Ok(
"/home/tomand/rcp",
)
Run Code Online (Sandbox Code Playgroud)
这是完整的代码:
use std::fs;
use std::env;
use serde_json;
use regex::Regex;
use std::path::Path;
fn determinate_file_size(file: &str) -> u64 {
fs::metadata(file).unwrap().len()
}
fn determinate_is_it_file_or_dirctory(arg: &str) -> &str {
let file = "File";
let dir = "Directory";
let re = Regex::new(r"/").unwrap();
if re.is_match(arg) {
return dir;
}
return file;
}
fn collect_user_arguments() -> Vec<String> {
env::args().collect()
}
fn check_if_arguments_count_valid(args: &Vec<String>) -> …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Cargo在我的系统(Arch Linux)上安装Rust crate.我可以搜索板条箱并找到我需要的东西,例如:
$ cargo search curl | head -n3
Updating registry `https://github.com/rust-lang/crates.io-index`
curl (0.3.0) Rust bindings to libcurl for making HTTP requests
curl-sys (0.2.0) Native bindings to the libcurl library
Run Code Online (Sandbox Code Playgroud)
当我尝试安装它时,我收到以下错误:
$ cargo install curl
Updating registry `https://github.com/rust-lang/crates.io-index`
error: specified package has no binaries
Run Code Online (Sandbox Code Playgroud)
这是什么意思?我是否必须先从源代码构建它?如果Cargo没有安装它,它有什么意义?
$ uname -a
Linux 4.6.1-2-ARCH #1 SMP PREEMPT Thu Jun 2 15:46:17 CEST 2016 x86_64 GNU/Linux
$ rustc --version
rustc 1.9.0
$ cargo --version
cargo 0.10.0 (10ddd7d 2016-04-08)
Run Code Online (Sandbox Code Playgroud) 我有一个包含二进制文件和库的箱子.该库对依赖性非常轻,而二进制文件需要更多,例如,加载文件或做范围并行的事情.
目前,我的Cargo.toml设置如下:
[dependencies.kdtree]
path = "../kdtree"
[dependencies]
rand="0.3.0"
rustc-serialize = "0.3"
csv = {git = "https://github.com/BurntSushi/rust-csv.git"}
crossbeam = "0.2"
num_cpus = "0.2"
[lib]
name = "conformal"
path = "src/lib.rs"
[[bin]]
name = "ucitest"
path = "src/bin/main.rs"
Run Code Online (Sandbox Code Playgroud)
库需要的唯一依赖项是kdtree和rand.但是,即使您只构建库,它似乎仍然构建了仅二进制依赖项.我已经尝试使用features各种花样像[[bin].dependencies]或[ucitest-dependencies](或添加dependencies= []线下[[bin]]),我认为可能使他们只建立二进制,但我不能找到一种方法.
这些不足以使这成为一个问题,但它困扰着我.有没有办法缩小依赖关系,以便它们只为特定的二进制文件构建?
我似乎有不同的版本rustc和cargo(我认为),
$ rustc -V
rustc 1.9.0 (e4e8b6668 2016-05-18)
$ cargo -V
cargo 0.10.0-nightly (10ddd7d 2016-04-08)
Run Code Online (Sandbox Code Playgroud)
有没有类似的命令
pip install --upgrade pip
Run Code Online (Sandbox Code Playgroud)
升级cargo?就是这样的
cargo install --upgrade cargo
Run Code Online (Sandbox Code Playgroud) 使用C预处理器,这是常见的,
#if defined(NDEBUG)
// release build
#endif
#if defined(DEBUG)
// debug build
#endif
Run Code Online (Sandbox Code Playgroud)
货物的粗略等价物是:
cargo build --release 发布.cargo build 用于调试.如何使用Rust的#[cfg(...)]属性或cfg!(...)宏来做类似的事情?
我知道Rust的预处理器不像C那样工作.我查看了文档,此页面列出了一些属性.(假设此列表是全面的)
debug_assertions 可以检查,但用于检查更一般的调试情况可能会误导.
我不确定这个问题是否与货物有关.
我按照readme说明从源代码构建Parity,然后执行以下命令:
cargo build --release
Run Code Online (Sandbox Code Playgroud)
然后:
~/.cargo/bin/cargo build --release
Run Code Online (Sandbox Code Playgroud)
.. 按照指示; 这两个导致我在提示挂起时收到以下消息:
Blocking waiting for file lock on the registry index
Run Code Online (Sandbox Code Playgroud)
我在Mac上.
我正在尝试使用rand::SmallRng. 文档说
此 PRNG 是功能门控的:要使用,您必须启用 crate 功能
small_rng。
我一直在搜索,但不知道如何启用“板条箱功能”。Rust 文档中的任何地方都没有使用该短语。这是我能想到的最好的:
[features]
default = ["small_rng"]
Run Code Online (Sandbox Code Playgroud)
但我得到:
功能
default包括small_rng既不是依赖项也不是其他功能的
文档有误,还是我遗漏了什么?
我正在尝试使用货物安装赛车,所以我cargo install racer在终端执行了命令,结果导致错误:
error[E0554]: #![feature] may not be used on the stable release channel
--> /home/rajkumar/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-0.1.2/src/lib.rs:47:34
|
47 | #![cfg_attr(feature = "nightly", feature(macro_vis_matcher))]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0554]: #![feature] may not be used on the stable release channel
--> /home/rajkumar/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-0.1.2/src/lib.rs:48:34
|
48 | #![cfg_attr(feature = "nightly", feature(allow_internal_unstable))]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0554`.
error: failed to compile `racer v2.1.10`, intermediate artifacts can be found at `/tmp/cargo-install5YWPWW`
Caused …Run Code Online (Sandbox Code Playgroud) 我在 Cargo.toml 中列出了一个需要特定环境变量集的依赖项。我可以export FOO=bar在 bash中运行并且一切正常,但是对于我的生活,我无法弄清楚如何在编译时使用 Cargo 导出这个环境变量。我试过设置环境变量build.rs通过std::env,Command和println!所有没有效果:
// build.rs
fn main() {
Command::new("ls")
.env("FOO", "bar")
.spawn()
.expect("ls command failed to start");
}
Run Code Online (Sandbox Code Playgroud)
// build.rs
fn main() {
std::env::set_var("FOO", "bar");
}
Run Code Online (Sandbox Code Playgroud)
// build.rs
fn main() {
println!("cargo:rustc-env=FOO=bar");
}
Run Code Online (Sandbox Code Playgroud)