根据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 ;
答案 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;