2

capnpc クレートの操作に問題があります。私は Arch Linux を実行しており、AUR から capnp をインストールし、github プロジェクトから capnpc-rust をコンパイルして、/usr/local/bin. コマンドを使用して、.capnp ファイルを簡単に手動でコンパイルできます。

capnp compile -orust --src-prefix=capnp capnp/message.capnp

capnpc プロジェクトのクローンを作成し、テスト ディレクトリで .capnp テスト ファイルをコンパイルしようとしましたが、どちらも機能しませんでした。エラーが発生していないため (以前は「ファイルが見つかりません」と表示されていました)、capnpc が動作しているように見えますが、どこにもファイルが見つかりません。

build.rs

extern crate capnpc;
fn main() {
    ::capnpc::compile("capnp", &["capnp/message.capnp"]).unwrap();
}

貨物.toml

...
build = "build.rs"

[lib]
name = "rustp2p"
path = "src/lib.rs"

[build-dependencies]
capnpc = "*"

[dependencies]
capnp = "0.5.0"

編集: .rs ファイルは /target/debug/build/.../out にビルドされます。

4

1 に答える 1

3

OUT_DIRCargo ビルド スクリプトから capnpc::compile を呼び出すと、生成されたコードは target/ のサブディレクトリに置かれます。このサブディレクトリは、環境変数を通じてメインのコンパイル時に見つけることができます。この戦略については、Cargo のドキュメントで説明されています。

これが機能するために、 capnpc-rust バイナリを /usr/local/bin やその他の場所にインストールする必要はありません。

あなたの build.rs と Cargo.toml ファイルは問題ないように見えます。

アドレス帳の例 を参考にしてください。

于 2015-10-29T12:31:16.223 に答える