Python で良い callgraph プログラムを書きたいので、pycparser を使用します。Pycparser は、抽象構文ツリーを正しく作成するために c ファイルを前処理する必要があります。私の最初のアプローチは-E
、ファイルで gcc のオプションのみを使用し、それを pycparser に渡すことでした。しかし、別のプロジェクトではNo such file or directory
、gcc が特定のヘッダーを見つけられないため、" " エラーが発生します。Linux カーネルを前処理しようとするgcc -E `find | grep "\.c"\`
と、そのようなフォルダーがないため、Linux/ プレフィックスが付いたもののようなヘッダー ファイルがいくつか見落とされます。gcc がヘッダー ファイルの場所を渡して正しく前処理するには、いくつかの追加フラグが必要なようです。任意の C プロジェクトを前処理する一般的な方法はありますか?
さらに、正しく前処理すると、同じ関数の複数のコピーが異なるファイルにあると思います。関数の元のファイルを特定する方法はありますか?