我正在努力使我的rust lib中的宏可用于其他rust项目。

这是我目前如何尝试完成此工作的示例。

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作为引用,但我似乎运气不高。有什么明显的我想念的东西吗?

最佳答案

您的属性杂乱无章。
#![…]指的是外部作用域,而#[…]指的是下一项。

以下是一些注意事项:

  • lib.rs中,不需要#![feature(phase)],而在#![phase(syntax)]中则没有意义。
  • other_project.rs中,您的phase属性被应用到 crate ,而不是extern crate dsp;项-这就是为什么它不从中加载任何宏的原因。删除!
  • 关于macros - 如何从一个 crate 中的另一个使用宏?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24749349/

    10-10 18:34