【发布时间】:2022-07-19 21:42:00
【问题描述】:
是否可以将ident 类型的macro_rules! 变量插入宏中的字符串文字?换句话说,是否可以“转义”文字的双引号?
// `trace_macros!` requires nightly
#![feature(trace_macros)]
trace_macros!(true);
macro_rules! export_mod_if_feature {
($system:ident) => {
#[cfg(target_os = "$system")] // <-- problem is here
pub mod $system;
};
}
export_mod_if_feature!(linux);
// ... should translate to:
#[cfg(target_os = "linux")]
pub mod linux;
// ... but instead it becomes:
#[cfg(target_os = "$system")]
pub mod linux;`
我尝试过使用#[cfg(target_os = stringify!($system))],但cfg 需要target_os = 之后的实际字符串文字,而不仅仅是编译时字符串。
【问题讨论】:
标签: rust rust-macros