Как использовать макрос из одного ящика в другом?
Я пытаюсь сделать макросы из моей ржавчины 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;
, поэтому он не загружает из него макросы. Удалите !
.