为了快速查看编译时错误,我使用了watchcargo.然而,cargo build只会在第一次构建时显示错误.

$ cargo build
Compiling clayman v0.0.1
src/core_math/vector.rs:8:5: 13:6 warning: method is never used: `New`, #[warn(dead_code)] on by default
src/core_math/vector.rs:8     pub fn New(x: i32, y: i32) -> Vector {
src/core_math/vector.rs:9         Vector {
src/core_math/vector.rs:10             x: x,
src/core_math/vector.rs:11             y: y
src/core_math/vector.rs:12         }
src/core_math/vector.rs:13     }
src/core_math/vector.rs:8:5: 13:6 warning: method `New` should have a snake case name such as `new`, #[warn(non_snake_case)] on by default
src/core_math/vector.rs:8     pub fn New(x: i32, y: i32) -> Vector {
src/core_math/vector.rs:9         Vector {
src/core_math/vector.rs:10             x: x,
src/core_math/vector.rs:11             y: y
src/core_math/vector.rs:12         }
src/core_math/vector.rs:13     }
src/main.rs:28:9: 28:10 warning: unused variable: `v`, #[warn(unused_variables)] on by default
src/main.rs:28     let v: vector::Vector;
                   ^
$ cargo build
$

也就是说,在watch屏幕显示清晰之前,我只能看到几秒钟的警告.

有什么办法能让cargo build人永远给我警告吗?

推荐答案

警告只有在Rust重新编译文件时才会出现;然而,它会尽可能多地缓存,如果什么东西没有改变,它会很高兴地跳过一个无用的编译.目前在Cargo中没有强制重建的选项.

一个快速而肮脏的解决方案,但很容易设置,就是touch个源文件,以便Cargo相信它们已更改:

$ cd /path/to/project/root
$ ls
Cargo.lock Cargo.toml src        target
$ cargo build
     Compiling abc v0.1.0 (file:///private/tmp/b/abc)
  src/main.rs:2:9: 2:10 warning: unused variable: `x`, #[warn(unused_variables)] on by default
  src/main.rs:2     let x: u8 = 123;
                        ^
$ cargo build
$ touch $(find src)
$ cargo build
     Compiling abc v0.1.0 (file:///private/tmp/b/abc)
  src/main.rs:2:9: 2:10 warning: unused variable: `x`, #[warn(unused_variables)] on by default
  src/main.rs:2     let x: u8 = 123;
                        ^

另一种可能更好的解决方案是清除包含二进制工件的target个目录,使用cargo clean:

$ cargo build
   Compiling abc v0.1.0 (file:///private/tmp/b/abc)
src/main.rs:2:9: 2:10 warning: unused variable: `x`, #[warn(unused_variables)] on by default
src/main.rs:2     let x: u8 = 123;
                      ^
$ cargo build
$ cargo clean
$ cargo build
   Compiling abc v0.1.0 (file:///private/tmp/b/abc)
src/main.rs:2:9: 2:10 warning: unused variable: `x`, #[warn(unused_variables)] on by default
src/main.rs:2     let x: u8 = 123;
                      ^

它的优点是不会触发Vim"文件已更改!"警告,并且在项目目录中的任何位置都可以运行,而不仅仅是根目录.

Rust相关问答推荐

为什么父作用域中的变量超出了子作用域

如何正确地将App handler传递给Tauri中的其他模块?

如何删除Mac Tauri上的停靠图标?

如何模拟/创建ReqData以测试Actix Web请求处理程序?

从未排序的链表中删除重复项的铁 rust 代码在ELSE分支的低级上做了什么?

AXUM一路由多个不包括URL的参数类型

如何将实现多个特征的 struct 传递给接受这些特征为&;mut?

如何轮询 Pin>?

这个不安全的 Rust 代码有什么问题,所以它可以在 Windows 上运行,但不能在 Ubuntu 上运行?

根据掩码将 simd 通道设置为 0 的惯用方法?

如何使用 Rust Governor 为每 10 秒 10 个请求创建一个 RateLimiter?

不安全块不返回预期值

在 Bevy 项目中为 TextureAtlas 精灵实施 NearestNeighbor 的正确方法是什么?

从 HashMap>, _> 中删除的生命周期问题

如何将参数传递给Rust 的线程?

试图理解 Rust 中的可变闭包

我如何将特征作为 struct 的拥有字段?

从 Cranelift 发出 ASM

为什么我可以从读取的可变自引用中移出?

相互调用的递归异步函数:检测到循环