Python から libclang を使用する場合、システムのインクルード パスが自動的に検索されないようです。
これらのパスを取得する信頼できる方法はありますか? さまざまな UNIX システムで実行されるコードを書いているので、パスをハードコーディングするのは好きではありません。
たとえば、test.cpp の場合
#include <stdio.h>
int main()
{
puts("Hello, world!");
}
とtest.py
from clang.cindex import Index
tu = Index.create().parse(None, ["test.cpp"])
print(list(tu.diagnostics))
実行python test.py
すると次のように出力されます。
[<Diagnostic severity 4, location <SourceLocation file 'test.cpp', line 1,
column 10>, spelling "'stdio.h' file not found">]
もちろん、次のようにしてシステムのインクルード パスを見つけることができます。
$ clang -v -E test.cpp
そして引数リストに追加"-Isome/path"
します。つまりparse
args = ["-I/Applications/[...]", "test.cpp"]
これは実際に機能し、エラーは発生しません。
ただし、これは移植性がありません。プログラムで clang に自動的に使用させることができれば、非常に便利です。