Я пытаюсь использовать функцию 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 = []
Может кто-нибудь объяснить, почему это происходит, и лучший способ условно скомпилировать такие блоки кода?