如何在Rust中导入宏?

时间:2016-07-27 12:02:15

标签: macros rust glium

我正在努力解决如何从外部包装箱导入宏的问题。在我的主要人员中,我正在进口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!'

2 个答案:

答案 0 :(得分:14)

#[macro_use],而不是#![macro_use]

#[..]将属性应用于其后的事物(在本例中为extern crate)。 #![..]将属性应用于包含事物(在本例中为根模块)。

答案 1 :(得分:4)

根据the Rust Edition Guide

在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中一样。