我正在为如何从外部机箱导入宏而苦苦挣扎。在我的main.rs中,我导入了Glium crate:
#![macro_use]
extern crate glium;
pub use glium::*;
// where my actual main function will be done from
mod part01drawtriangle;
fn main() {
part01drawtriangle::main();
}在我的另一个文件中,也就是我的main函数所在的文件中,我调用了该crate中的一个宏:
pub fn main() {
implement_vertex!(Vertex, position);
}在构建时,我得到了错误消息:
error: macro undefined: 'implement_vertex!'发布于 2016-07-27 20:37:20
不是#![macro_use],是#[macro_use]。
#[..]将属性应用于它之后的事物(在本例中为extern crate)。#![..]将属性应用于包含的对象(在本例中为根模块)。
发布于 2020-06-09 01:11:51
在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中一样。
https://stackoverflow.com/questions/38612392
复制相似问题