我有一个基于LibTooling的实用程序,我想输出一个用于调试的宏定义列表。可以使用clang/gcc -dM -E -打印编译器宏定义,但如果我将-dM -E或-dD传递给ClangTool,它似乎不起作用。是否可以通过任何方式使用LibTooling应用编程接口或命令行界面选项来实现这一点?它是否包含在已解析的源代码中定义的宏并不重要。
我看过其他类似的问题,据我所知,它们都是关于在经过解析的源代码中展开的宏。这不是我想要的。
发布于 2020-05-07 22:32:35
答案是显而易见的--回想起来。clang::Preprocessor::getPredefines()返回的正是编译器预定义的列表。预处理器对象可以例如从clang::CompilerInstance获得,作为clang::DiagnosticConsumer::BeginSourceFile()中的参数,等等。
出于完整性的考虑,此功能不能通过libclang API使用,但我可以使用所有预定义都出现在翻译单元的开头这一事实来实现。因此,在解析之后,我只列出了不在任何实际位置(使用CursorKind.MACRO_DEFINITION绑定表示法的location.file is None)的所有顶级游标
https://stackoverflow.com/questions/61157861
复制相似问题