【发布时间】:2016-11-19 15:42:01
【问题描述】:
我想用 python 编写一个好的调用图程序,因此我使用 pycparser。
Pycparser 需要预处理 c 文件才能正确创建抽象语法树。
我的第一种方法是在文件上仅使用 gcc 的 -E 选项,然后将其传递给 pycparser。
但是对于不同的项目,我会收到“No such file or directory”错误,因为 gcc 找不到特定的标头。如果我尝试使用 gcc -E `find | grep "\.c"\` 预处理 linux 内核,它会丢失一些头文件,例如带有 Linux/ 前缀的头文件,因为没有这样的文件夹。在我看来,我需要一些额外的标志来让 gcc 传递头文件的位置并正确地进行预处理。是否有预处理任意 C 项目的通用方法?
此外,我猜如果我让它正确预处理,那么不同文件中有相同函数的多个副本。有没有办法确定函数的原始文件?
【问题讨论】:
-
没有一种正确的方法可以找到所有源代码的标头。不同的程序需要通过预处理器命令行上的
-I /path/to/headers选项指定不同的目录集。
标签: python c gcc c-preprocessor pycparser