2012-04-27 8 views
1

多数の.cソースファイルを解析するためにpycparserを使用していますが、#includedライブラリ内の多くのものをパーサーが処理できないため、私の目的には必要ありません。私はそれをコンパイルする必要はありません、ちょうど特定の.cからASTを生成する必要があります私は処理しています。私は今それを渡している cppの引数は以下のとおりです。cプリプロセッサにすべての#includeを無視させる方法はありますか?

cpp_args=["-D__attribute__=","-D__extension__=","-D__builtin_va_list=void*"] 

任意のアイデア?

ありがとうございます!

+2

'おそらくUSE_INCLUDES'の#ifdef

cpp -nostdinc foo.c 

は私与えますか? –

答えて

4

がプリプロセッサに-nostdincオプションを指定してみてください(あなたがどんな-Iオプションを渡していないことを確認してください)無視したいすべてのヘッダガードタグ。 foo.cでこの入力を考える:

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

int main(int argc, char **argv) { 
     return 0; 
} 

実行:

# 1 "foo.c" 
# 1 "<built-in>" 
# 1 "<command-line>" 
# 1 "foo.c" 




int main(int argc, char **argv) { 
return 0; 
} 

そして、次のエラー:

foo.c:1:19: error: no include path in which to search for stdio.h 
foo.c:2:20: error: no include path in which to search for stdlib.h 
foo.c:3:20: error: no include path in which to search for unistd.h 
+0

これは#などを含むでしょうか? – Chris

+0

私の例では既存の '#include'行と似ていますので、おそらく... – larsks

+0

エラーが問題になる場合は、空のファイルがたくさんあるディレクトリを指す' -I'オプションを使用してください適切な名前を付けてください。 –

0

一つの解決策は、例えば、あなたが各ヘッダの伝統的なラッパーを持っている場合の#includeガード

を使用することです。

#ifndef THIS_FILE_H 
#define THIS_FILE_H 

    // stuff 

#endif 

次に、あなたは可能性があり、単純に#defineあなたは

+0

もう少し説明したり、私に例を教えていただけますか?私は、あなたが言ったことをどのように適用するかについてはあまりよく分かりません。私はこれを行う必要があるように、どのように書かれているかで広く範囲が広い.cファイルをたくさん持っています。助けてくれてありがとう! – Chris

関連する問題