我一直在努力让一个Rust编译器插件注册正确。
我有一个名为rust_to_glsl
的单独机箱,位于主代码的子目录中。
在rust_to_glsl/src/lib.rs
文件中,我有以下内容
#![feature(plugin_registrar)]
#![feature(rustc_private)]
#![crate_type="dylib"]
extern crate rustc;
extern crate syntax;
#[doc(hidden)]
#[plugin_registrar]
pub fn registrar(registry: &mut rustc::plugin::Registry) {
println!("Test");
registry.register_macro("to_glsl", expand);
}
此外,我还定义了实际的expand
函数。
在src/main.rs
中,我试图插入那个插件/机箱。
#![feature(plugin)]
#![plugin(rust_to_glsl)]
然后我试着用这个宏:
fn main() {
let glsl = to_glsl!(
const x: uint = 5;
static texture: &Texture2d = 1;
fn hello() {
min(5, 3 * 1 + 5)
}
);
println!("{}", glsl);
}
如果我编译了它,就会得到以下错误:
Compiling opal v0.1.0 (file:///Users/chris/Code/Rust/gl)
src/main.rs:2:11: 2:23 error: can't find crate for `rust_to_glsl`
src/main.rs:2 #![plugin(rust_to_glsl)]
在构建过程中,我注意到rust_to_glsl
没有被编译(使用cargo build
)。
如果我添加了extern crate rust_to_glsl
,那么它会编译rust_to_glsl
。但然后夸克说
49:23 error: macro undefined: 'to_glsl!'
src/main.rs:49 let glsl = to_glsl!(
我不确定是否需要use
宏,或者是否所有宏都是全局的。
发布于 2015-05-23 22:57:19
结果我需要把这个添加到rust_to_glsl/Cargo.toml
中
[lib]
name = "rust_to_glsl"
crate-type = ["dylib"]
然后将其包含为普通的build-dependency
而不是dependency
。
https://stackoverflow.com/questions/30418297
复制相似问题