【问题标题】:Does cargo have the ability to detect source changes?货物是否有能力检测来源变化?
【发布时间】:2015-07-01 04:12:01
【问题描述】:

有没有办法相当于cargo run,但只有在源文件发生更改时才重新编译,例如make

. ├── Cargo.lock ├── Cargo.toml ├── input.txt ├── README.md └── src ├── dna.rs ├── dynamic.rs ├── lib.rs └── main.rs

编辑:添加了tree 输出。

【问题讨论】:

    标签: rust rust-cargo


    【解决方案1】:

    Cargo 默认会这样做。

    创建一个新项目:

    $ cargo new --bin foo
    $ cd foo/
    

    运行它:

    $ cargo run
       Compiling foo v0.0.1 (file:///private/tmp/foo)
         Running `target/foo`
    Hello, world!
    

    再次运行它,不做任何更改:

    $ cargo run
         Running `target/foo`
    Hello, world!
    

    更新文件并再次运行:

    $ touch src/main.rs
    $ cargo run
       Compiling foo v0.0.1 (file:///private/tmp/foo)
         Running `target/foo`
    Hello, world!
    

    请注意第二次运行中缺少Compiling foo...。当文件被修改时(这里使用touch),它被重新编译。

    对于它的价值,我正在使用cargo 0.0.1-pre-nightly (66849de 2015-03-10) (built 2015-03-11)

    【讨论】:

    • 奇怪,我的每次都在编译。当您还有内部模块时,行为是否有所不同?
    • 内部模块”是指其他源文件,并带有相应的mod 语句吗?还是你的意思是别的?如果是前者,那么我可以说也不会导致重新编译。也许您的编辑器或其他人错误地更新了修改时间?
    • 嗯,很确定 VIM 没有碰它们。关闭它只是为了确定,它仍然每次都在重建。可以肯定的是,我跑了stat。如果有帮助的话,我编辑了我的问题以包括我的树。
    • 我刚刚确认我在使用cargo new --bin test 创建的全新项目中看到了相同的行为。每次我运行cargo run 它都会编译并运行。 Rust 版本是 rustc 1.0.0-nightly (b0746ff19 2015-03-05) (built 2015-03-06)
    • 我建议最近更新到最新版本,以排除最近对 Rust 或 Cargo 的任何更改。你也可以试试cargo cleangit clean
    【解决方案2】:

    回答你在标题中提出的问题,“货物有能力检测源变化吗?”,答案是肯定的,cargo watch。它是cargo 的扩展,因此您必须先下载并编译它,然后才能使用它。 https://github.com/passcod/cargo-watch

    当然,从您的详细问题来看,很明显这不是您要问的问题,但看到标题并点击链接的其他人可能确实想知道该问题的答案。

    【讨论】:

      猜你喜欢
      • 2021-01-05
      • 2012-06-11
      • 2023-03-30
      • 2012-08-18
      • 2017-09-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2012-02-20
      相关资源
      最近更新 更多