我想知道,如果这样的事情是可能的
fn main() {
#[cfg(foo)] {
println!("using foo config");
}
}
上下文是一些代码,不能充分地与刚单元测试进行测试。 我经常要运行一个“演示” CFG显示信息。 我在寻找替代手工的代码输入/输出部分的一些评论。
我想知道,如果这样的事情是可能的
fn main() {
#[cfg(foo)] {
println!("using foo config");
}
}
上下文是一些代码,不能充分地与刚单元测试进行测试。 我经常要运行一个“演示” CFG显示信息。 我在寻找替代手工的代码输入/输出部分的一些评论。
至少锈1.21.1的,这是可能的,你说的正是这样做:
fn main() {
#[cfg(foo)]
{
println!("using foo config");
}
}
在此之前,这是不可能做到这一点完全有条件(即避免块是完全型检查),这样做,是通过涵盖RFC#16 。 但是,您可以使用cfg
宏观其计算结果为true
或false
基础上, --cfg
标志:
fn main() {
if cfg!(foo) { // either `if true { ... }` or `if false { ... }`
println!("using foo config");
}
}
的身体if
总是有名称解析和类型检查运行,因此可能并不总是可行的。
您可能会感兴趣的箱子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.
}}
}
}