How to check release / debug builds using cfg in Rust?

使用 C 语言的预处理器,

#if defined(NDEBUG)
// release build
#endif


#if defined(DEBUG)
// debug build
#endif

货物的粗略等价物是:

  • cargo build --release准备释放。
  • cargo build调试。

如何使用 Rust 的 #[cfg(...)]属性或 cfg!(...)宏来做类似的事情?

我知道 Rust 的预处理器不像 C 语言那样工作。我查了文档和 此页面列出了一些属性.(假设这个列表是全面的)

debug_assertions could be checked, but it may be misleading when used to check for the more general debugging case.

我不确定这个问题是否应该与货物有关。

43424 次浏览

您可以使用 debug_assertions作为适当的配置标志。它可以同时使用 #[cfg(...)]属性和 cfg!宏:

#[cfg(debug_assertions)]
fn example() {
println!("Debugging enabled");
}


#[cfg(not(debug_assertions))]
fn example() {
println!("Debugging disabled");
}


fn main() {
if cfg!(debug_assertions) {
println!("Debugging enabled");
} else {
println!("Debugging disabled");
}


#[cfg(debug_assertions)]
println!("Debugging enabled");


#[cfg(not(debug_assertions))]
println!("Debugging disabled");


example();
}

this discussion中,这个配置标志被命名为执行此操作的正确方法。目前没有更合适的内置条件。

来自 参考文献:

debug_assertions-在编译时默认启用 中启用额外的调试代码 开发,但不是生产。例如,它控制 behavior of the standard library's debug_assert! macro.

另一种稍微复杂一点的方法是使用 #[cfg(feature = "debug")]并创建一个构建脚本,该脚本为您的板条箱启用一个“调试”特性,如 给你所示。