我有类似的东西:
#[macro_use] extern crate log;
pub fn do_nothing() { let _ = log::Level::Info; }
#[cfg(test)]
mod tests {
#[test]
fn test_a() { debug!("Message."); }
}
这会发出警告:
warning: unused `#[macro_use]` import
如果删除宏导入,请将第1行更改为:
extern crate log;
然后我在编译时遇到以下错误:
error: cannot find macro `debug!` in this scope
如果我然后尝试仅为测试模块导入宏,即:
extern crate log;
pub fn do_nothing() { let _ = log::Level::Info; }
#[cfg(test)]
mod tests {
#[macro_use] extern crate log;
#[test]
fn test_a() { debug!("Message."); }
}
然后我收到编译器错误:
error[E0468]: an `extern crate` loading macros must be at the crate root
是否有解决方案可以避免所有警告,而不仅仅是抑制它们?
答案 0 :(得分:9)
您可以使用cfg_attr
:
#[cfg_attr(test, macro_use)]
extern crate log;
另见: