Clang libtooling:如何打印编译器宏定义

Clang libtooling: how to print compiler macro definitions

我有一个基于 LibTooling 的实用程序,我想输出一个宏定义列表以用于调试目的。可以使用 clang/gcc -dM -E - 打印编译器宏定义,但如果我将 -dM -E-dD 传递给 ClangTool,它似乎不起作用。是否可以通过 LibTooling API 或 CLI 选项以任何方式做到这一点?它是否包含在解析的源代码中定义的宏并不重要。

我看过其他类似的问题,据我所知,它们都是关于在解析的源代码中扩展的宏。这不是我需要的。

回想起来,答案显而易见。 clang::Preprocessor::getPredefines() returns 就是这样——编译器预定义的列表。预处理器对象可以获得,例如来自 clang::CompilerInstance,作为 clang::DiagnosticConsumer::BeginSourceFile() 中的参数,等等

为了完整起见,此功能无法通过 libclang API 获得,但我可以利用所有预定义都存在于翻译单元开头这一事实来实现。因此,在解析之后,我只是列出了 CursorKind.MACRO_DEFINITION 的所有不在任何实际位置的顶级游标(location.file is None 使用 python 绑定符号)