【问题标题】:How can I get cargo to recompile changed files automatically?如何让货物自动重新编译更改的文件?
【发布时间】:2015-04-05 20:09:18
【问题描述】:

我听说 cargo 能够自动重新编译更改的源文件,但我很难弄清楚如何让它这样做。

现在,每次我想输入检查代码时,我都会手动运行cargo buildcargo run。我宁愿简单地保存文件并在相邻的终端窗口中查看结果。

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

似乎很难找到,所以我开始怀疑它是否真的受支持。可能有人说 cargo 可以检测到更改的文件并重新编译它们,而他的意思是 cargo 可以检测到 unchanged 文件并避免重新编译它们,例如 make

【问题讨论】:

    标签: rust rust-cargo


    【解决方案1】:

    货运手表

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

    cargo install cargo-watch
    

    然后运行:

    cargo watch -x run
    

    仅观察 src 文件夹中的更改并清除控制台使用:

    cargo watch -c -w src -x run
    

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

    watchexec

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

    cargo install watchexec-cli
    

    然后像这样使用它:

    watchexec -r cargo run
    

    【讨论】:

    • 感谢 watchexec! cargo-watch 仅适用于货物。
    • 这似乎只适用于二进制文件,当我尝试使用库时出现error: a bin target must be available for cargo run 错误。
    • watchexec 现在有一个单独的 CLI 包,所以实际的安装命令是 cargo install watchexec-cli。当前版本的正确调用也没有引号,所以它是watchexec --restart cargo run
    【解决方案2】:

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

    当我找到它时,它不适用于稳定的(或当前的)Rust,但我已经修补了它。 它仍然可以使用一些工作,但它肯定会加快编译/修复错误周期。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        另一个选项是使用entr

        ls -r | entr cargo run
        

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

        【讨论】:

        • brew install entr first
        • 我喜欢这个主意,但它是 ls -R 而不是 ls -r。可悲的是,它不适用于我的系统。这是工作示例: $ find 。 -类型 f | entr echo 123 这不是: $ find 。 -类型 f | entr cargo run 可能是因为cargo run 命令没有立即退出。
        • 终于我知道了如何让它工作:find src | entr -r cargo run
        • 说了这么多,通常最好的选择仍然是使用cargo
        【解决方案5】:

        我在这个命令中使用 nodemon:

        nodemon --watch src -e rs --exec cargo check
        

        所有这一切都是观察 src 文件夹中的所有 rs 文件并运行货物检查。

        【讨论】:

        • npm i -g nodemon 在运行上述操作之前,您需要使用 npm 全局安装 nodemon
        【解决方案6】:

        在你的 Visual Studio 代码中:转到 File 并检查 Auto Save 它将自动保存所做的更改。

        【讨论】:

        • 这并没有实现自动的目标。
        • 不,它没有。保存文件不会导致 Cargo 构建它,这是这个问题的重点。
        猜你喜欢
        • 2019-06-07
        • 1970-01-01
        • 2012-07-05
        • 2014-06-23
        • 2012-09-25
        • 1970-01-01
        • 2013-11-05
        • 2010-10-27
        • 2018-11-26
        相关资源
        最近更新 更多