有了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
,但当用于检查更一般的调试情况时,它可能会产生误导。
我不确定这个问题是否与货物有关。
发布于 2016-08-29 11:38:56
您可以使用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();
}
此配置标志被命名为在这一讨论中执行此操作的正确方法。目前已经没有更合适的内置条件了。
来自参考文献
debug_assertions
-在不进行优化的情况下编译时默认启用。这可以用于在开发中启用额外的调试代码,但不能在生产中使用。例如,它控制标准库的debug_assert!
宏的行为。
另一种稍微复杂一些的方法是使用#[cfg(feature = "debug")]
并创建一个为机箱启用“调试”功能的构建脚本,如这里所示。
https://stackoverflow.com/questions/39204908
复制相似问题