I have specified a few features inside Cargo.toml
:
[features]
complex = []
simple = []
When I build my project I use cargo build --features="complex"
or simple
.
In some functions, I want to return a value based on which feature is used:
fn test() -> u32 {
let x: u32 = 3;
if cfg!(feature = "complex") {
let y: u32 = 2;
x + y
}
if cfg!(feature = "simple") {
let y: u32 = 1;
x + y
}
}
But this doesn't work as it tries to evaluate both expressions. What is the proper way to use the cfg!
macro in my case?
The documentation for
cfg!
states:That means that
cfg!(...)
is replaced with a Boolean (true
/false
). Your code would look something like this, after it's expanded:The easiest solution is to add an
else
:You can also use the attribute form of
cfg
. In this case, the attribute can prevent the entire next expression from being compiled:No, it doesn't. Evaluation occurs at run-time, and this code cannot even be compiled.
See also: