使用 C 预处理器这是很常见的,
#if defined(NDEBUG)
// release build
#endif
#if defined(DEBUG)
// debug build
#endif
Cargo 的大致等价物是:
cargo build --release
发布。cargo build
用于调试。Rust 的
#[cfg(...)]
属性或 cfg!(...)
宏如何用于执行类似的操作?
我知道 Rust 的预处理器不像 C 那样工作。我检查了文档,此页面列出了一些属性。 (假设此列表很全面)
debug_assertions
可以检查,但在用于检查更一般的调试情况时可能会产生误导。
我不确定这个问题是否应该与 Cargo 有关。
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")]
并创建一个构建脚本,为您的板条箱启用“调试”功能,如此处所示。
有用于此目的的 at_debug 板条箱。