Rust没有遵循条件编译的自定义cfg功能标志

时间:2018-02-25 06:04:33

标签: rust

我试图使用rust的条件编译功能,但它根本不起作用。我尝试使用它在默认库和另一个库之间切换,使用cfg重新导出两个不同子模块中的一个,具体取决于是否设置了功能标志。代码:

lib.rs:

pub mod ffi;
#[cfg(ffiv1)]
mod ffiv1;
#[cfg(not(ffiv1))]
mod ffiv2;

#[test]
fn test_ffi_struct() {
    let _fs = ffi::FFIStruct{ x: 42};
}


#[cfg(ffiv1)]
#[test]
fn test_v1() {
    println!("v1 enabled");
}

ffi.rs:

//re-export as ffi::FFIStruct
#[cfg(ffiv1)]
pub use ffiv1::FFIStruct;

#[cfg(not(ffiv1))]
pub use ffiv2::FFIStruct;

ffiv1.rs:

pub struct FFIStruct {
    pub x: i32,
    y: IShouldFail
}

ffiv2.rs:

pub struct FFIStruct {
   pub x: i64
}

Cargo.toml:

[features]
ffiv1 = []

使用默认的cargo build / test,这会构建并按预期工作,一切正常。

使用cargo build --features ffiv1时,它的行为完全没有传递任何功能标记。使用--verbose运行cargo会将--cfg 'feature="ffiv1"'显示为rustc

我希望编译在ffiv1.rs中的未定义符号IShouldFail上失败。 (以及编译时运行的额外测试)。

这里有什么问题?

0 个答案:

没有答案