4

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 に自動的に使用させることができれば、非常に便利です。

4

1 に答える 1