我正在创建一个程序宏,该宏从某些配置文件自动生成库(这是寄存器布局,但这对问题并不重要)。>>
我希望该库自动生成自动库随附的文档,并包括应该以cargo test
运行的doc测试。现在,我已经实现了大部分功能,但是有一个我看不到解决方案的问题。
假设我们有一个名为my_lib
的库,我们在其中调用该宏以填充它:
use my_macro_lib::hello; hello!();
展开为类似的内容:
/// `foo` will always return `true` /// ``` /// use my_lib; /// assert!(my_lib::foo()); /// ``` pub fn foo() -> bool { true }
这将按预期运行-
cargo doc
将执行正确的操作,cargo test
将按预期运行doctest。
问题在于,在此示例中,use my_lib
被硬编码到my_macro_lib
中,这显然是不希望的。
如何创建一个宏来推断正在执行呼叫的板条箱的名称?
我尝试在程序宏内使用macro_rules!
来扩展$crate
,但这违反了卫生规则。
我正在创建一个程序宏,该宏从某些配置文件自动生成一个库(这是寄存器布局,但这对问题并不重要)。我希望该库自动-...
您可以通过读取CARGO_PKG_NAME
环境变量来获得使用您的宏的板条箱的名称。请注意,您必须通过阅读std::env
(在宏的“运行时”)和not