Как использовать макрос из одного ящика в другом?

Я пытаюсь сделать макросы из моей ржавчины lib доступными для других проектов ржавчины.

Вот пример того, как я пытаюсь получить эту работу в данный момент.

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

Ваши атрибуты запутаны.

#![…] относится к внешней области, а #[…] относится к следующему элементу.

Вот некоторые примечания:

  • В lib.rs не требуется #![feature(phase)], а #![phase(syntax)] не имеет смысла.

  • В other_project.rs ваш атрибут phase применяется к ящику, а не к элементу extern crate dsp;, поэтому он не загружает из него макросы. Удалите !.