我正在做一个Rust项目。我正在使用Cargo特性标志对一些代码进行条件编译。有些情况下,我必须在特性标志中包含整个文件,因此在每个函数和use
语句上添加#[cfg(feature="my-flag")]
没有多大意义。
因此,为了将整个文件包含在特性标志中,我考虑将文件中的所有内容包围在一个块中,并为该块添加特性标志。
#[cfg(feature="my-flag")]
{
use crate::access_control::{func1, func2};
use crate::models;
...
#[derive(Debug)]
pub enum MyEnum{..}
#[derive(Clone)]
pub Struct MyStruct{..}
pub fn my_func() {...}
fn my_func_internal() {...}
...
}
但是我得到了错误Syntax Error: expected an item after attributes
另外,也有一些情况下,我想把整个目录都包含在特性标志中。我应该怎么做呢?为每个文件添加特性标志是一种方法。有更好的方法吗?
4条答案
按热度按时间h43kikqp1#
从https://doc.rust-lang.org/cargo/reference/features.html开始
这可以是整个目录,也可以是单个文件,这取决于模块的结构。
vm0i2vca2#
正如@MarcusDunn的回答一样,正确的解决方案是将该属性应用于
mod
声明:然而,为了完整起见,我想指出的是,属性可以应用于它们所在的项,而不是应用于后面的项,这些项称为"inner attributes",通过在
#
之后添加一个!
来指定:fnvucqvd3#
你可以在模块上使用条件编译。也许类似下面这样的东西会适合你的用例:
使用
cargo run
运行:使用
cargo run --features feat
运行:efzxgjgh4#
您可以使用
cfg-if
板条箱: