内联`cfg_attr(feature = x,path =“ file.rs”)`不起作用

时间:2019-09-28 22:09:23

标签: rust

根据documentation for cfg_attr,可以同时执行以下两项操作:

#[cfg_attr(windows, path = "windows.rs")]
#[cfg_attr(feature = "magic", sparkles, crackles)]

但是,尝试同时使用它们时出现错误。

// this works
#[cfg(connection = "websocket")]
#[path = "websocket.rs"]
mod protocol;

// file not found for module `protocol`
#[cfg_attr(connection = "websocket", path = "websocket.rs")]
mod protocol ;

1 个答案:

答案 0 :(得分:1)

cfg有条件地启用整个项目。 cfg_attr有条件地启用一个或多个属性

在此:

#[cfg(connection = "websocket")]
#[path = "websocket.rs"]
mod protocol;

仅当条件为true时,才包括整个protocol模块,但在此条件中:

#[cfg_attr(connection = "websocket", path = "websocket.rs")]
mod protocol;

protocol模块始终处于启用状态。如果条件为true,则编译器将在websocket.rs中查找其源,但是如果为false,则它将在protocol.rs中查找。换句话说,它等同于:

#[cfg(connection = "websocket")]
#[path = "websocket.rs"]
mod protocol;

#[cfg(not(connection = "websocket"))]
mod protocol;