如何在另一个箱子中使用宏?

时间:2014-07-15 03:23:01

标签: macros rust rust-crates

我正在努力使我的生锈库中的宏可用于其他生锈项目。

以下是我目前正在努力完成这项工作的一个例子。

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作为参考,但我似乎没有太多运气。有什么明显的东西我不见了吗?

1 个答案:

答案 0 :(得分:7)

你的属性纠结。

#![…]指的是外部范围,而#[…]指的是 next 项目。

以下是一些值得注意的事项:

  1. lib.rs中,#![feature(phase)]是不必要的,#![phase(syntax)]毫无意义。

  2. other_project.rs中,您的phase属性应用于 crate ,而不是extern crate dsp;项 - 这就是为什么它不会加载来自它的任何宏。删除!