我想知道这样的事情是否可能
fn main() {
#[cfg(foo)] {
println!("using foo config");
}
}
上下文是一些仅使用单元测试无法充分测试的代码。我经常要做一个"演示" cfg显示信息。我正在寻找手动注释/删除某些代码部分的替代方法。
答案 0 :(得分:6)
至少从Rust 1.21.1开始,就像你说的那样做到这一点:
fn main() {
#[cfg(foo)]
{
println!("using foo config");
}
}
在此之前,不可能完全有条件地执行此操作(即避免完全检查块的类型),RFC #16涵盖了这一点。但是,您可以使用基于cfg
标记评估为true
或false
的{{1}}宏:
--cfg
fn main() {
if cfg!(foo) { // either `if true { ... }` or `if false { ... }`
println!("using foo config");
}
}
的正文始终具有名称解析和类型检查运行,因此可能无法始终有效。
答案 1 :(得分:0)
您可能对crate cfg-if感兴趣,或者只是一个简单的宏:
macro_rules! conditional_compile {
($(#[$ATTR:meta])* { $CODE: tt }) => {
{
match 0 {
$(#[$ATTR])*
0 => $CODE,
// suppress clippy warnning `single_match`.
1 => (),
_ => (),
}
}
}
}
fn main() {
conditional_compile{
#[cfg(foo)]
{{
println!("using foo config");
// Or something only exists in cfg foo, like a featured mod.
}}
}
}