是否可以拥有一个同时具有程序宏和逻辑的板条箱?

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。

【讨论】:

以上是关于是否可以拥有一个同时具有程序宏和逻辑的板条箱?的主要内容,如果未能解决你的问题,请参考以下文章

获取不同级别的图像边缘

全栈程序员的新玩具Rust板条箱

包括一个内部模块会产生“也许缺少板条箱'module2'”

使用通用网络摄像头进行对象检测

创建一个无法在其板条箱之外实例化的零大小结构的惯用方法是啥?

如何配置 SublimeLinter-contrib-rustc 以找到“活塞”板条箱?