2015-05-23 2 views
1

Я вытаскиваю свои волосы из-за попытки получить плагин компилятора Rust для правильной регистрации.Как правильно зарегистрировать плагин компилятора 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 макрос или если все макросы являются глобальными.

ответ

3

Оказывается, мне нужно, чтобы добавить это rust_to_glsl/Cargo.toml

[lib] 
name = "rust_to_glsl" 
crate-type = ["dylib"] 

А затем включить его не как build-dependency но нормальный dependency

Смежные вопросы