2 conditional-compilation rust
我正在处理一些代码,其中缓冲区由静态大小的数组支持。由于 Rust 和它提供的构建工具提供了有条件编译的可能性,我可以这样做:
struct Buffer {
// default case, if none is set
#[cfg(not(buffersize))]
buffer: [f32; 16],
#[cfg(buffersize = "32")]
buffer: [f32; 32],
#[cfg(buffersize = "64")]
buffer: [f32; 64],
}
impl Buffer {
fn new() -> Buffer {
Buffer {
#[cfg(not(buffersize))]
buffer: [0.0; 16],
#[cfg(buffersize = "32")]
buffer: [0.0; 32],
#[cfg(buffersize = "64")]
buffer: [0.0; 64],
}
}
}
Run Code Online (Sandbox Code Playgroud)
还有一个问题是使用特性有条件地编译代码。单独使用功能,我必须结合buffersize实际值,例如buffersize16. 是否可以将cfg标志提供给 Cargo,或者我是否需要直接将它们提供给rustc?
您可以设置环境变量RUSTFLAGS或rustflags在.cargo/config.
来自环境变量
RUSTFLAGS — 以空格分隔的自定义标志列表,要传递给 Cargo 执行的所有编译器调用。与货物 rustc 相比,这对于将标志传递给所有编译器实例很有用。
在您的示例中,您可以使用:
RUSTFLAGS='--cfg buffersize="32"' cargo build
Run Code Online (Sandbox Code Playgroud)