如何让货物自动重新编译已更改的文件?

时间:2015-04-05 20:09:19

标签: rust rust-cargo

我听说货物有能力自动重新编译已更改的源文件,但我很难弄清楚如何告诉它这样做。

目前,我每次要输入检查代码时都会手动运行cargo buildcargo run。我宁愿只是保存文件并在邻近的终端窗口中查看结果。

如果您仍然不知道我在说什么,我正在寻找相当于sbt ~compilesbt ~run的货物。

这似乎很难找到,所以我开始怀疑它是否真的得到了支持。可能有人说货物可以检测到已更改的文件并重新编译它们的意思是货物可以检测未更改的文件并且避免重新编译它们,例如{{1} }。

5 个答案:

答案 0 :(得分:9)

如果您正在处理一个持续运行的服务器项目(例如hyper,iron等),并且您需要在文件更改时重新启动它,则可以使用cargo watch。安装:

cargo install cargo-watch

然后运行:

cargo watch -x run

有关更多示例,请参阅cargo-watch README

或者,您可以使用watchexec。安装它:

cargo install watchexec

然后像这样使用它:

watchexec --restart "cargo run"

答案 1 :(得分:3)

似乎没有内置任何支持,但有一个扩展程序(cargo-watch)可以使用inotify检测更改。

当我找到它时,它不会与稳定(或当前)Rust一起工作,但是自从修补它以来我就一直没有。 它仍然可以使用一些工作,但它肯定会加快编译/修复错误周期。

答案 2 :(得分:2)

我认为区别在于,运行cargo run两次不会构建代码两次,除非输入文件已更改。据我所知,Cargo没有你想要的内置功能。您可以提交功能请求。在此期间,我建议你只使用watch。您也可以使用guard之类的内容。使用watch更简单,但只需每隔N秒运行一次代码。 guard需要更多设置,但效率会更高。

答案 3 :(得分:1)

另一个选择是使用entr

ls -r | entr cargo run

这将递归列出当前目录中的所有文件。然后将它们重定向到entr命令,该命令监视对这些文件的更改,然后最终运行cargo run

答案 4 :(得分:-1)

在Visual Studio代码中:转到文件并选中“自动保存” ,这将自动保存所做的更改。