2

我正在尝试将我的 proc_macro 的参数作为参数传递给 include_str!,但出现错误:在编译期间参数必须是字符串文字:

/* In lib.rs: */
#[proc_macro]
pub fn include_rsml(input: TokenStream) -> TokenStream {
    let input = parse_macro_input!(input as LitStr);
    let filename = input.value();
    let source_code = include_str!(filename);
    /* ... Do something with source_code and emit TokenStream ... */
}

/* In main.rs: */
include_rsml!("MainWindow.rsml");

是否可以通过利用实际上我们在编译时知道文件名的事实来做我想做的事?

如果唯一的方法是使用 std::fs 文件 I/O 而不是 include_str!(这不是我最喜欢的解决方案,因为这样我必须手动执行路径解析),有没有办法指出 Cargo 它应该重建依赖于 MainWindow.rsml 的源,如果 MainWindow .rsml 在没有创建我自己的 build.rs 文件的情况下发生了变化,就像 include_str 一样!做?

4

0 回答 0