如何在编写gcc插件时捕获命令行选项

如何在编写gcc插件时捕获命令行选项,gcc,compiler-construction,Gcc,Compiler Construction,我在cpp上添加了一些新功能,我想编写一个编译器过程,根据不同的选项修改一些cpp源代码。(我使用了一些gcc功能(cilk),所以我认为它不能由libclang完成,clang不能识别cilk)。gcc中有任何api可以做这些事情吗?当前的gcc插件api不允许您扩展预处理器。但是,您可以添加内置、杂注和函数或变量属性 您可以使用toplev.h中的save\u decoded\u options和save\u decoded\u options\u count来获取编译器程序参数。但是插件需

我在cpp上添加了一些新功能,我想编写一个编译器过程,根据不同的选项修改一些cpp源代码。(我使用了一些gcc功能(cilk),所以我认为它不能由libclang完成,clang不能识别cilk)。gcc中有任何api可以做这些事情吗?

当前的gcc插件api不允许您扩展预处理器。但是,您可以添加内置、杂注和函数或变量属性

您可以使用
toplev.h
中的
save\u decoded\u options
save\u decoded\u options\u count
来获取编译器程序参数。但是插件需要
-fplugin foo arg-
程序参数(对于插件
foo
…)

你为什么需要这些


你是否考虑扩展GCC(一种特定领域的语言来扩展GCC)?< / P>谢谢。由于我无法修改cpp源代码,因此修改AST可能是个好主意。我想添加一些函数,并替换一些函数调用。顺便问一下,您知道如何将gcc AST树节点转换为源代码吗?谢谢。您应该定义“将GCC AST转换为”源代码“的含义。(这实际上是不可能的,因为Gimple不仅仅是普通的C,例如,因为它处理异常和OpenMP)。再次感谢您。我还想从源代码中提取一些代码来执行jit。但是gcc似乎不支持jit,所以我必须将AST节点转换回源代码,并调用llvm来编译它。此外,我遇到了一个问题,我调用了gcc头文件中定义的一些函数,例如walk_tree_1,但当gcc加载插件时,它抱怨它找不到符号。我使用许多选项重新编译gcc,比如--enable plugin…,但问题仍然存在。你曾经遇到过这样的问题吗?