-2

我想在 python 中编写一个好的调用图程序,因此我使用 pycparser。Pycparser 需要预处理 c 文件才能正确创建抽象语法树。我的第一种方法是仅在-E文件上使用 gcc 选项,然后将其传递给 pycparser。但是对于不同的项目,我会得到“ No such file or directory”错误,因为 gcc 没有找到特定的标头。如果我尝试用它来预处理 linux 内核,gcc -E `find | grep "\.c"\`它会丢失一些头文件,比如那些带有 Linux/ 前缀的头文件,因为没有这样的文件夹。在我看来,我需要一些额外的标志来让 gcc 传递头文件的位置并正确预处理。是否有一种预处理任意 C 项目的通用方法?

另外,我想如果我让它正确预处理,那么不同文件中有相同函数的多个副本。有没有办法确定函数的原始文件?

4

1 回答 1

1

您需要了解 GCC 如何查找头文件,至少包括编译器命令行开关和搜索路径的环境变量。

我怀疑各种项目集配置变量的构建脚本会影响 GCC 如何为任何特定编译找到头文件。许多这样的脚本甚至在命令行上进行宏替换,这意味着您必须知道脚本在做什么。

如果您将 C 源文件与设置其构建上下文的 make 脚本隔离开来,GCC 将找不到正确的头文件。这就是你的问题。

您可能需要运行构建脚本,并拦截对 GCC 的调用以捕获必要的上下文。

于 2016-11-19T16:24:09.953 回答