簡體   English   中英

如何從另一個程序宏中調用一個程序宏?

[英]How can I call one procedural macro from another?

我想編寫兩個程序宏 - 一個是我的,第二個來自另一個箱子。

我想將程序宏稱為普通函數。 標記為#[proc_macro_derive]的函數是公共的,但我不能從我的宏調用它:編譯器找不到該函數。 我認為過程宏函數僅在代碼生成期間使用,並且在編譯期間不存在於最終代碼中。

我可以生成具有#[derive(...)]代碼,編譯器將調用第二個宏,但這種方法要求最終用戶依賴第二個宏包,即使他們沒有直接使用它。

有沒有什么方法可以調用一個程序宏像一個正常的函數來獲取令牌並返回令牌?

我找到了最簡單的解決方法,其中第二個過程宏必須在第一個之后調用:

  1. 創建一個不是程序宏包的獨立包
  2. 在Cargo.toml和lib.rs中包含兩個過程宏作為依賴項,為兩個crates添加#[macro_use] extern crate ...
  3. 讓第一個宏用#[derive(SecondProcMacro)]生成代碼

這樣,用戶只需添加一個依賴項:包含兩個過程宏的包。

如果我想對其他程序宏的輸出進行后處理,我仍然不知道該怎么做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM