是否可以在源文件中声明配置令牌?

时间:2016-08-13 03:14:49

标签: rust

在Rust中,可以按如下方式执行conditional compilation

#[cfg(rust_version = "1.10")]
fn my_func() {}

是否可以定义cfg的变量以在同一源文件中进行检查?

例如:

// leave off, just a quick test to enable when troubleshooting.
#define use_counter 1  // C style (not valid Rust)

#[cfg(use_counter == "1")]
static mut fn_counter: usize = 0;

fn my_func() {

#[cfg(use_counter = "1")]
    unsafe { fn_counter += 1; }

}

main () {
    // code calling 'my_func'

    // print how many times the function is called.
#[cfg(use_counter = "1")]
    unsafe { println!("Function count {}", fn_counter); }

}

我不是在问如何编写函数计数器,它只是一个可选择将逻辑插入源文件的例子。

1 个答案:

答案 0 :(得分:1)

是的,它写为#[cfg(use_counter)]。这些标志可以在编译时在命令行上启用或禁用,并且不会在Cargo.toml中公开。

fn main() {
    #[cfg(use_counter)]
    println!("counter is enabled");
}

使用货运,在禁用该功能的情况下运行:

$ cargo run

使用货运,在启用该功能的情况下运行:

$ RUSTFLAGS="--cfg use_counter" cargo run

在禁用功能的情况下直接编译:

$ rustc src/main.rs

在启用该功能的情况下进行编译:

$ rustc src/main.rs --cfg use_counter