2017-03-11 24 views
1

私はa small C libraryへのRustインターフェースを書いています。ヘッダはいくつかの場所に広がっています。これはシステムライブラリではなく、通常は同じパッケージ内のいくつかの実行可能ファイルによって使用されます。私は現在、私のCargoプロジェクトのgitサブモジュールとしてそれを含めています。bindgenでインクルードパスを設定する

ライブラリを構築するのはかなり簡単です。私はbuild.rsからgccクレートを使用することを選択しました:

gcc::Config::new() 
      .file("external/foo/dir1/file1.c") 
      .file("external/foo/dir2/file2.c") 
      .include("external/foo/dir1/") 
      .include("external/foo/dir2/") 
      .include("external/foo/config_a/") 
      .compile("libfoo.a"); 

は今、私はあまり大騒ぎせずにFFIのインターフェイスを生成するbindgenクレートを使用することを期待していたが、設定の方法を持っていないようですパスを含める。

this blogによって提案され、いくつかのヘッダーを含めるように私はwrapper.hを作成することができますが、dir1/dir1.hは、それが見つからない.include("external/foo/config_a/")による構築するときに働く、直接conf.hが含まれている場合。

bindgenのこちらのAPIには何も見つかりません(本質的にgcc/clangの-Iオプションに相当します)。私は何か不足していますか?私はこれまでと考えることができます

最良のオプションは、build.rsにいくつかの一時ディレクトリにライブラリのソースからの様々なヘッダをコピーして、その上bindgenを実行することですが、よりよい方法がある場合には、やや厄介なようです。あなたは、任意の引数を指定してBuilder::clang_argを使用することができますAPIで

答えて

3

let b = bindgen::builder().header("foo.h").clang_arg("-I/path")`; 

コマンドラインから、あなたのような、--後に引数を追加することによって、同じことを行うことができます。

bindgen foo.h -- -I/path 
関連する問題