是否可以拥有一个同时具有程序宏和逻辑的板条箱?
Posted
技术标签:
【中文标题】是否可以拥有一个同时具有程序宏和逻辑的板条箱?【英文标题】:Is it possible to have one crate with both procedural macros and logic? 【发布时间】:2019-03-26 14:40:02 【问题描述】:当您想共享使用过程宏的库时,双箱方法foo
/foo_derive
是否不可避免?
我想提供一个具有逻辑和宏的板条箱。我尝试的第一件事是:
my_proc_macro
├── Cargo.toml
├── src/lib.rs
└── my_crate
├── Cargo.toml
└── src/lib.rs
在my_proc_macro
crate 中,我尝试pub use my_crate::*;
,但禁止这样做:编译器拒绝构建它。
是否可以反过来做?我的意思是:将程序宏包导入库中,然后重新导出宏?
【问题讨论】:
我很确定可以反过来做,但我不确定如何做。以rental
为例,它具有rental-impl
作为依赖项,但用户代码不必编写extern crate rental_impl
,因此rental!
宏必须由main crate 重新导出。
@rodrigo 不幸的是,我不认为 rental
是这样做的:它导出 a "regular" macro 进行派生
【参考方案1】:
重新导出宏实际上非常简单。只需使用
#[macro_use]
extern crate my_proc_macro;
在my_crate
的根中。
The serde
crate can be used this way when enabling the feature serde_derive
.
2018版也可以explicitly re-export proc macros using use
declarations。
【讨论】:
以上是关于是否可以拥有一个同时具有程序宏和逻辑的板条箱?的主要内容,如果未能解决你的问题,请参考以下文章