【问题标题】:How do I exclude a file from being built on OS X?如何排除在 OS X 上构建的文件?
【发布时间】:2017-02-05 14:13:13
【问题描述】:

我有 src/bin/linux-only.rs,它做了一些只在 Linux 上工作的事情(例如,只存在于 Linux 上的 libc 绑定)。我想排除在 OS X 上构建该文件。

我开始将#[cfg(target_os = "linux")] 放在linux-only.rs 中的每个块上,但这会使源代码无缘无故地混乱。

有更好的方法吗?

【问题讨论】:

    标签: rust conditional-compilation rust-cargo


    【解决方案1】:

    在文件顶部写#![cfg(target_os = "linux")](注意感叹号)将适用于整个文件(只要它包含单个模块),而不仅仅是下一个块(项目)。来源:Rust reference

    编辑:如果您可以将该文件移动到它自己的 crate 中,您可以利用 Cargo 的 platform-specific dependencies

    【讨论】:

    • 当然!现在很清楚了。感叹号适用于整个“块”,因为它位于文件的顶部,适用于整个模块。谢谢。
    • 一个问题仍然存在:cargo build 现在向error: main function not found 抱怨。我该如何避免呢?
    • @PhilippKeller:你可以提供一个#[cfg(not(target_os = "linux"))] fn main() {},但是我担心在within 模块中注释会很麻烦。你确定没有办法简单地告诉 cargo 只考虑 Linux 上的文件吗?
    • 我在 cargo.toml 文档中找不到任何内容。最接近的是 [doc.crates.io/manifest.html#the-features-section](features) 部分,但这是为了将cargo 给出的参数移交给#[cfg 属性
    【解决方案2】:

    目前看来这是不可能的。我提交了feature request

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-22
      • 2018-02-13
      • 1970-01-01
      • 2015-07-31
      • 2011-12-26
      相关资源
      最近更新 更多