Crates可以重新出口他们所依赖的板条箱。在此示例中,stm32f103xx-hal
包就是:pub extern crate stm32f103xx;
。
在我的代码中,我依赖于stm32f103xx-hal
。现在我想使用interrupt!()
包导出的stm32f103xx
宏。我是否必须向我的Cargo.toml添加stm32f103xx
crate依赖项,或者是否有办法重新使用stm32f103xx-hal
的导出定义?
请注意,这与“如何使用来自不同箱子的宏”的问题完全不同。在#[macro_use(interrupt)]
上声明stm32f103xx-hal
会产生cannot find macro 'interrupt!' in this scope
错误。
答案 0 :(得分:2)
我认为您需要将stm32f103xx
添加到Cargo.toml
。原因如下:
例如,在Diesel lib.rs
#[macro_use]
extern crate diesel_derives;
#[doc(hidden)]
pub use diesel_derives::*;
他们将#[macro_use]
放在extern crate line上,然后他们使用diesel_derives
项目中的所有内容。
在您的情况下,lib.rs
看起来像这样:
pub extern crate stm32f103xx;
因此,重新导出不会指定使用宏。
这就是为什么您需要将stm32f103xx
添加到Cargo.toml中以指定在您自己的lib.rs
中使用宏的原因。
答案 1 :(得分:1)
中间条件箱应该重新导出宏以便它们可用:
MAC / SRC / lib.rs
#[macro_export]
macro_rules! a_macro {
() => (42);
}
帧间/ SRC / lib.rs
pub extern crate mac;
pub use mac::*; // Re-export the macros
EX / SRC / main.rs
#[macro_use]
extern crate inter;
fn main() {
println!("Hello, {}", a_macro!());
}
在您的情况下,它或者是图书馆的错误,或者他们故意决定不再重新导出它们,因此您需要将它们与它们一起使用。您可以选择直接依赖底层板条箱,但随后您可能会遇到不匹配的箱子版本,从而导致恼人的错误。
答案 2 :(得分:0)
最近刚改变使用通用导入系统。
假设您要使用SELECT * FROM `hotel_tax_details`
WHERE `start_range_cost`<=2500 AND `end_range_cost`>=2500
包中的interrupt!
宏,新方法就是这样:
foo
请注意,这还不稳定,因此它是#![feature(use_extern_macros)];
pub use foo::interrupt;
后面的功能门控。