私は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で