#cargo-build #rebuild #rerun #file #ignore #changed #specify

rerun_except

当指定的文件未更改时,重新运行 cargo 构建

4 个版本 (1 个稳定版)

1.0.0 2021 年 3 月 1 日
0.1.2 2020 年 4 月 28 日
0.1.1 2019 年 11 月 21 日
0.1.0 2019 年 5 月 26 日

#987 in 开发工具

Download history 269/week @ 2024-04-07 402/week @ 2024-04-14 509/week @ 2024-04-21 571/week @ 2024-04-28 328/week @ 2024-05-05 603/week @ 2024-05-12 521/week @ 2024-05-19 480/week @ 2024-05-26 342/week @ 2024-06-02 490/week @ 2024-06-09 651/week @ 2024-06-16 536/week @ 2024-06-23 354/week @ 2024-06-30 469/week @ 2024-07-07 580/week @ 2024-07-14 389/week @ 2024-07-21

每月 1,836 次下载
用于 2 crate

Apache-2.0/MIT

8KB

rerun_except

指定哪些文件不应触发 cargo 重建。

在正常操作中,当任何相关文件更改时,cargo 会重建项目。可以使用 rerun-if-changed 指令告诉 cargo 仅在特定文件更改时重建。然而,在使用 rerun-if-changed 时很容易忘记添加新文件,导致 cargo 在应该重建项目时没有重建。

rerun_except 反转此逻辑,当文件更改时,cargo 会重建项目,除非您明确忽略该文件。这比 rerun-if-changed 更安全,因为如果您忘记明确忽略文件,则 cargo 仍然会重建您的项目。

rerun_except 使用 ignore 库以 gitignore 格式指定要忽略的文件。请注意,您的项目中的显式忽略文件(例如 .gitignore)将隐式添加到忽略文件列表中。

例如,如果您有以下文件布局

proj/
  .gitignore
  Cargo.toml
  src/
    lib.rs
  lang_tests/
    run.rs
    test1.lang
    test2.lang
  target/
    ...

并且您不希望两个 .lang 文件触发重建,那么您将告诉 rerun_except 排除 lang_tests/*.lang。假设,正如常见的那样,您的 .gitignore 文件也包括 target/ 目录,那么 rerun_except 也会忽略 target 目录。

添加新的文件,如 lang_tests/test3.lang 不会触发重建(因为它被忽略glob lang_tests/*.lang 覆盖),但添加新的文件,如 build.rs 会触发重建(因为它没有被忽略glob覆盖)。

要以此方式使用 rerun_except,您只需在 build.rs 文件中调用 rerun_except::rerun_except 并传递一个包含忽略glob的数组,这些glob格式遵循 gitignore

use rerun_except::rerun_except;

fn main() {
    rerun_except(&["lang_tests/*.lang"]).unwrap();
}

依赖关系

~4–13MB
~133K SLoC