如何展开大型项目宏并获取LLVM中ValueTy的完整定义?
获取LLVM中ValueTy枚举完整定义的简便方法
方法一:带依赖的预编译命令
单独用-E编译失败是因为缺少LLVM头文件路径和必要宏定义,用LLVM构建环境中的clang,加上项目包含路径即可:
clang -E -I/path/to/llvm/include -DLLVM_INCLUDE_DIRS=/path/to/llvm/include llvm/include/llvm/IR/Value.h | grep -A 100 "enum ValueTy"
替换/path/to/llvm为你的LLVM源码路径,预编译后就能看到宏展开后的完整枚举列表。
方法二:利用clang的AST导出功能
既然clangd能解析代码,直接用clang的AST dump命令查看展开后的枚举:
clang -Xclang -ast-dump -I/path/to/llvm/include llvm/include/llvm/IR/Value.h | grep -A 50 "ValueTy"
输出的AST结构中,EnumDecl节点下就是完整展开的ValueTy枚举值。
方法三:借助llvm-config自动填充编译参数
如果已经构建过LLVM,用llvm-config获取正确的编译参数,无需手动指定路径:
clang -E $(llvm-config --cxxflags) llvm/include/llvm/IR/Value.h | grep -A 100 "enum ValueTy"
llvm-config --cxxflags会自动填充所有必要的头文件路径和宏定义。
补充:Value.h里的ValueTy枚举是通过
Value.def中的VALUE_DEF宏展开生成的,上述方法都是让预处理器正确处理这些宏依赖,从而得到完整的枚举定义。
内容的提问来源于stack exchange,提问作者huiiiii
相关产品推荐
相关产品推荐

