snippetrustCritical
How to check release / debug builds using cfg in Rust?
Viewed 0 times
howcfgcheckusingreleaserustbuildsdebug
Problem
With the C pre-processor it's common to do,
Cargo's rough equivalents are:
How would Rust's
I understand that Rust's pre-processor doesn't work like C's. I checked the documentation and this page lists some attributes. (assuming this list is comprehensive)
I'm not sure if this question should be related to Cargo or not.
#if defined(NDEBUG)
// release build
#endif
#if defined(DEBUG)
// debug build
#endifCargo's rough equivalents are:
cargo build --releasefor release.
cargo buildfor debug.
How would Rust's
#[cfg(...)] attribute or cfg!(...) macro be used to do something similar?I understand that Rust's pre-processor doesn't work like C's. I checked the documentation and this page lists some attributes. (assuming this list is comprehensive)
debug_assertions could be checked, but it may be misleading when used to check for the more general debugging case.I'm not sure if this question should be related to Cargo or not.
Solution
You can use
This configuration flag was named as a correct way to do this in this discussion. There is no more suitable built-in condition for now.
From the reference:
optimizations. This can be used to enable extra debugging code in
development but not in production. For example, it controls the
behavior of the standard library's
An alternative, slightly more complicated way, is to use
debug_assertions as the appropriate configuration flag. It works with both #[cfg(...)] attributes and the cfg! macro:#[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 configuration flag was named as a correct way to do this in this discussion. There is no more suitable built-in condition for now.
From the reference:
debug_assertions - Enabled by default when compiling withoutoptimizations. This can be used to enable extra debugging code in
development but not in production. For example, it controls the
behavior of the standard library's
debug_assert! macro.An alternative, slightly more complicated way, is to use
#[cfg(feature = "debug")] and create a build script that enables a "debug" feature for your crate, as shown here.Code Snippets
#[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();
}Context
Stack Overflow Q#39204908, score: 273
Revisions (0)
No revisions yet.