我正在努力使我的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/