11

我正在努力使我的 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 作为参考,但我似乎运气不佳。有什么明显的我失踪了吗?

4

1 回答 1

7

你的属性很纠结。

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

这里有一些注意事项:

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

  2. other_project.rs中,您的phase属性应用于crate,而不是extern crate dsp;item ——这就是它不从其中加载任何宏的原因。删除!.

于 2014-07-15T03:53:26.333 回答