如何从另一个程序宏中调用一个程序宏?

时间:2018-03-06 22:11:27

标签: rust

我想编写两个程序宏 - 一个是我的,第二个来自另一个箱子。

我想将程序宏称为普通函数。标记为#[proc_macro_derive]的函数是公共的,但我不能从我的宏调用它:编译器找不到该函数。我认为过程宏函数仅在代码生成期间使用,并且在编译期间不存在于最终代码中。

我可以生成具有#[derive(...)]的代码,编译器将调用第二个宏,但这种方法要求最终用户依赖第二个宏包,即使他们没有直接使用它。

有没有什么方法可以像处理令牌和返回令牌的普通函数一样调用程序宏?

1 个答案:

答案 0 :(得分:1)

我找到了最简单案例的解决方法,其中必须在第一个程序宏之后调用第二个程序宏:

  1. 创建一个不是程序宏包的单独包装箱
  2. 在Cargo.toml和lib.rs中包含两个过程宏作为依赖项,为两个包添加GEODESIC
  3. 让第一个宏生成#[macro_use] extern crate ...
  4. 代码

    这样,用户只需要添加一个依赖项:包含两个过程宏的包。

    如果我想对其他程序宏的输出进行后处理,我仍然不知道该怎么办。