Как проверить наличие функций, установленных в Rust во время компиляции? - PullRequest
1 голос
/ 04 апреля 2019

Я пытаюсь использовать функцию Rusts для условной компиляции модуля в моем ящике, а также использовать его только при включенной функции. Условная компиляция работает нормально, когда функция установлена, но отказывается от компиляции, когда функция не установлена.

Я использую тот же флаг функции, чтобы условно импортировать модуль в основной, поэтому я предполагаю, что модуль не следует импортировать, когда функция не используется.

#[cfg(feature = "debug")]
pub mod k {
    pub struct S { pub x: i32, pub y: i32}
}

И как я это использую в основном

pub fn main() {
    if cfg!(feature = "debug") {
        use self::k;
        let _s = k::S {x: 4, y: 5};
    }

    let g = vec![1, 2, 4];
    println!("{:?}", g);
}

Если я включаю функцию через флаг --features, она компилируется, как и ожидалось:

cargo build --features "debug" 
    Finished dev [unoptimized + debuginfo] target(s) in 0.08s

Но когда я не передаю --features, он терпит неудачу, и я ожидаю, что он должен пропустить блок с набором cfg!.

error[E0432]: unresolved import `self::k`
  --> src/main.rs:32:13
   |
32 |         use self::k;
   |             ^^^^^^^ no `k` in the root

error: aborting due to previous error

For more information about this error, try `rustc --explain E0432`.

Вот так выглядит мой Cargo.toml

[features]
default = []
debug = []

Может кто-нибудь объяснить, почему это происходит, и лучший способ условно скомпилировать такие блоки кода?

...