【问题标题】:How to pass rustc flags to cargo?如何将 rustc 标志传递给货物?
【发布时间】:2016-10-28 15:54:36
【问题描述】:

我正在尝试禁用死代码警告。我尝试了以下

cargo build -- -A dead_code

➜ rla git:(master) ✗ cargo build -- -A dead_code 错误:参数无效。

所以我想知道如何将 rustc 参数传递给 cargo?

【问题讨论】:

    标签: rust rust-cargo


    【解决方案1】:

    您可以通过几种不同的方式通过 Cargo 传递标志:

    • cargo rustc,它只会影响你的 crate 而不是它的依赖项。
    • RUSTFLAGS 环境变量,它也会影响依赖关系。
    • 某些标志具有适当的 Cargo 选项,例如,-C lto-C panic=abort 可以在 Cargo.toml 文件中指定。
    • 使用rustflags= 键之一在.cargo/config 中添加标志。

    但是,在您配置 lints 的特定情况下,您不需要使用编译器标志;您还可以使用属性直接在源代码中启用和禁用 lints。这实际上可能是一个更好的选择,因为它更健壮、更有针对性,并且不需要您更改构建系统设置:

    #![deny(some_lint)] // deny lint in this module and its children
    
    #[allow(another_lint)] // allow lint in this function
    fn foo() {
        ...
    }
    

    另见:

    【讨论】:

    • 例如在 bash 中,RUSTFLAGS="-C opt-level=3 -C debuginfo=0" cargo build --release 将构建一个优化的(为了速度)发布版本,去掉调试符号(为了大小)。
    • 不起作用。在可执行文件的调试信息中仍然包含硬编码的路径名;例如a Display implementation returned an error unexpectedly C:\\Users\\...
    • @GirkovArpa 请参阅 stackoverflow.com/a/54842093/1541330 了解如何完全最小化 Rust 可执行文件的大小。
    【解决方案2】:

    您可以通过修改 config.toml 文件来禁用死代码警告。 如果文件不存在,请在以下位置创建一个。

    Windows: %USERPROFILE%\.cargo\config.toml
    Unix: $HOME/.cargo/config.toml
    

    然后在下面添加一行

    [target.'cfg(target_family = "windows")']
    rustflags = ["-Adead_code"]
    

    如果您不想看到任何未使用的变量警告,请添加以下行

    [target.'cfg(target_family = "windows")']
    rustflags = ["-Aunused"]
    

    不要忘记在生产之前禁用这些 :)

    【讨论】:

      猜你喜欢
      • 2014-11-16
      • 2021-11-25
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 2011-12-28
      相关资源
      最近更新 更多