我正在努力解决如何从外部包装箱导入宏的问题。在我的主要人员中,我正在进口Glium箱子:
#![macro_use]
extern crate glium;
pub use glium::*;
// where my actual main function will be done from
mod part01drawtriangle;
fn main() {
part01drawtriangle::main();
}
在我的主要功能来自我的另一个文件中,我从该包中调用了一个宏:
pub fn main() {
implement_vertex!(Vertex, position);
}
构建时,我收到错误消息:
error: macro undefined: 'implement_vertex!'
答案 0 :(得分:14)
#[macro_use]
,而不是#![macro_use]
。
#[..]
将属性应用于其后的事物(在本例中为extern crate
)。 #![..]
将属性应用于包含事物(在本例中为根模块)。
答案 1 :(得分:4)
在Rust 2018中,您可以通过
use
语句(而不是旧的#[macro_use]
属性)从外部包装箱中导入特定宏 。
// in a `bar` crate's lib.rs:
#[macro_export]
macro_rules! baz {
() => ()
}
// in your crate:
use bar::baz;
// Rather than:
//
// #[macro_use]
// extern crate bar;
这仅适用于外部包装箱中定义的宏。对于本地定义的宏,仍然需要
#[macro_use] mod foo;
,就像Rust 2015中一样。