Встроенный `cfg_attr (feature = x, path =" file.rs ")` не работает - PullRequest
0 голосов
/ 29 сентября 2019

Согласно документации для 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 Ответ

1 голос
/ 29 сентября 2019

cfg включает весь элемент условно.cfg_attr включает один или несколько атрибутов условно.

В этом:

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

весь модуль protocol будет включен только в том случае, если условие истинно,но в этом:

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

модуль protocol всегда включен.Если условие истинно, компилятор будет искать его источник в websocket.rs, но если оно ложно, он будет искать в protocol.rs.Другими словами, это эквивалентно:

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

#[cfg(not(connection = "websocket"))]
mod protocol;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...