使用pycparser解析一大堆.c源文件,但解析器無法在#included庫中處理很多事情,而且我真的不需要它們來達到我的目的。我不需要編譯它,只需要從正在處理的具體.c生成AST。 CPP的ARGS我傳遞它現在是:任何讓c預處理器忽略所有#include的方法?
cpp_args=["-D__attribute__=","-D__extension__=","-D__builtin_va_list=void*"]
任何想法?
謝謝!
使用pycparser解析一大堆.c源文件,但解析器無法在#included庫中處理很多事情,而且我真的不需要它們來達到我的目的。我不需要編譯它,只需要從正在處理的具體.c生成AST。 CPP的ARGS我傳遞它現在是:任何讓c預處理器忽略所有#include的方法?
cpp_args=["-D__attribute__=","-D__extension__=","-D__builtin_va_list=void*"]
任何想法?
謝謝!
嘗試指定-nostdinc
選項預處理器(並確保你沒有傳遞任何-I
選項)。鑑於這種輸入foo.c
:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv) {
return 0;
}
運行:
cpp -nostdinc foo.c
給我:
# 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
一個解決方案是使用的#include衛士
如果你有傳統的包裝中的每個標題,例如。
#ifndef THIS_FILE_H
#define THIS_FILE_H
// stuff
#endif
然後,你可以你想簡單地#define
所有的頭文件保護標籤忽略
你能多解釋一下還是舉個例子?我不太清楚如何應用你所說的話。我有很多.c文件,它們的編寫方式非常廣泛,我需要這樣做。謝謝您的幫助! – Chris 2012-04-27 16:05:13
'#ifdef來USE_INCLUDES'吧? – 2012-04-27 15:56:49