首页 > 解决方案 > 如何在另一个项目中生锈宏?

问题描述

嗨,是否可以在多个项目中使用自定义声明性宏?如果是,如何?

项目树结构如下:(宏在proj1中定义)

.
├── proj1
│   ├── Cargo.toml
│   └── src
│       └── main.rs
├── proj2
│   ├── Cargo.toml
│   └── src
│       └── main.rs
└── proj3
    ├── Cargo.toml
    └── src
        └── main.rs

标签: rust

解决方案


proj1需要成为混合 bin/lib 箱,您才能使用其中的宏。这意味着将您的宏移动到proj1/src/lib.rs. 但是,我建议您将常用功能移至不同的 crate,我们称之为lib1. 其余的已经详细描述了,所以这里只是一个快速演示:

cargo new --lib lib1
cargo new proj2
echo 'lib1 = { path = "../lib1" }' >>proj2/Cargo.toml
echo '#[macro_export] macro_rules! mahcro { () => { println!("Hello macro.") } }' >lib1/src/lib.rs
echo 'use lib1::mahcro; fn main() { mahcro!() }' >proj2/src/main.rs
cargo run --manifest-path proj2/Cargo.toml

顺便说一句,工作区在这种设置中非常有用,我建议您阅读它们。


推荐阅读