如何正确注册 Rust 编译器插件?
How do I properly register a Rust compiler plugin?
我一直在努力让 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
中,我正在努力引入 plugin/crate。
#![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
宏或者是否所有宏都是全局的。
原来我需要将它添加到 rust_to_glsl/Cargo.toml
[lib]
name = "rust_to_glsl"
crate-type = ["dylib"]
然后将其包含为正常的 dependency
而不是 build-dependency
我一直在努力让 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
中,我正在努力引入 plugin/crate。
#![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
宏或者是否所有宏都是全局的。
原来我需要将它添加到 rust_to_glsl/Cargo.toml
[lib]
name = "rust_to_glsl"
crate-type = ["dylib"]
然后将其包含为正常的 dependency
build-dependency