You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Rust导出的proc_macro函数移至crate根目录之外?

将Rust过程宏拆分到独立文件的正确做法

完全可以把导出的#[proc_macro]函数移到crate根目录之外的模块里,你当前的写法错误在于:#[proc_macro]属性不能加在pub use语句上,必须直接标注在函数定义本身。

修正后的代码示例

项目结构(保持不变)

- Cargo.lock
- Cargo.toml
- src
   - lib.rs
   - module_file.rs

module_file.rs(关键修改:给函数加属性)

use proc_macro::TokenStream;

#[proc_macro]
pub fn some_function(tokens: TokenStream) -> TokenStream {
    // 这里写你的宏逻辑代码
    tokens
}

lib.rs(仅做导出,无需加属性)

mod module_file;

pub use module_file::some_function;

原理说明

Rust的过程宏属性(#[proc_macro]、#[proc_macro_derive]等)是绑定在函数定义上的元数据,用来告知编译器这个函数是过程宏的入口点。如果把属性加在use语句上,编译器无法识别这是合法的过程宏定义,因此抛出你看到的错误。

如果你的项目有多个过程宏,可以按功能拆分到不同子模块(比如derive_macros.rs、attr_macros.rs),每个模块内的函数直接标注对应宏属性,最后在lib.rs统一导出即可。

内容的提问来源于stack exchange,提问作者Tom Stock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 23:48:16