No, you can’t define constants (read: const
bindings) with a compiler flag. But you can use the env!
macro for something similar. It reads some environment variable at compile time.
const MAX_DIMENSIONS_RAW: &'static str = env!("MAX_DIMENSIONS");
Sadly, this returns a string and not an integer. Furthermore we can’t yet call arbitrary functions (like parse
) at compile time to calculate a constant. You could use lazy_static
to achieve something similar:
lazy_static! {
static ref MAX_DIMENSIONS: usize = MAX_DIMENSIONS_RAW.parse().unwrap();
}
Of course you should add proper error handling. If your user doesn’t need to define the environment variable, you can use option_env!
.
With this approach, you can pass the setting at build time:
$ MAX_DIMENSIONS=1000 cargo build