我正在努力使我的生锈库中的宏可用于其他生锈项目。
以下是我目前正在努力完成这项工作的一个例子。
lib.rs
:
#![crate_name = "dsp"]
#![feature(macro_rules, phase)]
#![phase(syntax)]
pub mod macros;
macros.rs
:
#![macro_escape]
#[macro_export]
macro_rules! macro(...)
other_project.rs
:
#![feature(phase, macro_rules)]
#![phase(syntax, plugin, link)] extern crate dsp;
macro!(...) // error: macro undefined: 'macro!'
我是否在正确的轨道上?我一直在尝试使用std :: macros作为参考,但我似乎没有太多运气。有什么明显的东西我不见了吗?
答案 0 :(得分:7)
你的属性纠结。
#![…]
指的是外部范围,而#[…]
指的是 next 项目。
以下是一些值得注意的事项:
在lib.rs
中,#![feature(phase)]
是不必要的,#![phase(syntax)]
毫无意义。
在other_project.rs
中,您的phase
属性应用于 crate ,而不是extern crate dsp;
项 - 这就是为什么它不会加载来自它的任何宏。删除!
。