2016-08-26 12 views
10

は私がgliumライブラリ、implement_vertex!からマクロを使用する必要がある次のディレクトリ構造foo.rsマクロをRustのサブモジュールにどのようにインポートしますか?

  • /main.rs
  • /lib.rs
  • /tutorial/mod.rs
  • /tutorial/foo.rs

を持っています。 をfoo.rsの頭に付けるとerror: an `extern crate` loading macros must be at the crate rootとなります。私も得ますerror: macro undefined: 'implement_vertex!'

チュートリアルモジュールのクレートルートであるlib.rsもあります。そこに#[macro_use]を置く必要がありました。 main.rslib.rsの両方がある場合、2つの木枠のルーツが作成されますか?

マクロをサブモジュールにインポートする正しい方法は何ですか?

+2

実際のコードがない場合、これはブラインド推測によってのみ解決できます。必要なのは、構造体、インポート先、使用先です。 –

+0

どのようにコンパイルしますか( 'cargo build')? 'Cargo.toml'を修正しましたか?どのファイルに 'mod tutorial;'という行がありますか?どのファイルに 'mod foo;'という行がありますか?この情報がなければ、モジュールツリーが@DKのように見えます。すでに言った。 –

答えて

2

コンパイラはあなたに言っただけのようにそれを実行します。

an `extern crate` loading macros must be at the crate root

あなたのケースでmain.rsあるクレートルートで#[macro_use] extern crate glium;を入れてください。 extern crateステートメントがmodステートメントの前にあることを確認してください。そうしないと、モジュールはインポートされたマクロにアクセスできなくなります。

サブモジュールでマクロを使用することができます。

+0

ええ、それが私が最初に試したことです。それはうまくいかなかった。私はまだエラーが発生します:マクロは未定義です: 'implement_vertex!' – jz87

+1

'extern crate'文が' mod'文の前にあることを確認してください。さもなければ、改造者はインポートされたマクロにアクセスすることができません。 – durka42

+4

@ durka42でも同じエラーが発生します。 – Zelphir

6

マクロは、コンパイル段階で十分に早く処理され、の注文はとなります。あなたは、私のように、おそらく素敵になっていて、錆に慣れて、あなたの使用と梱包明細書の注文を気にする必要がなくなりました。

必要に応じてご lib.rsおよび/または main.rsファイルの先頭にあなたの #[macro_use] extern crate glium;文を移動し

0

私は私の元の問題を理解しました。 2つのカーゴルーツがあることが判明しましたか?私はlib.rsmain.rsの両方を持っています。 #[macro_use]は、、lib.rsとなりました。

関連する問題