add_rules("mode.release") target("bb") add_files("bb.cpp") set_languages("c++latest") add_includedirs("C:/vs2022/VC/Tools/MSVC/14.37.32822/include") add_includedirs("G:/llvm2/clang/include") add_includedirs("G:/llvm2/llvm/include") add_includedirs("G:/llvm2/build/include") add_includedirs("G:/llvm2/build/tools/clang/include") add_linkdirs("G:/llvm2/build/Release/lib") add_linkdirs("E:/path") set_targetdir('.') add_links("legacy_stdio_definitions","WS2_32","Ole32","libucrt","user32","kernel32","user32","gdi32","winspool","comdlg32","advapi32","shell32","ole32","oleaut32","uuid","odbc32","odbccp32","libvcruntime","ws2_32","libcmt","libcpmt","libcpmt1","atls","WindowsApp","常用","gdiplus","简图","简图加","minidocx","pugixml","zip","cpr","libcurl","Wldap32","OpenGL32","version", "clang-repl", "clangAnalysis", "clangAnalysisFlowSensitive", "clangAnalysisFlowSensitiveModels", "clangAPINotes", "clangARCMigrate", "clangAST", "clangASTMatchers", "clangBasic", "clangCodeGen", "clangCrossTU", "clangDependencyScanning", "clangDirectoryWatcher", "clangDriver", "clangDynamicASTMatchers", "clangEdit", "clangExtractAPI", "clangFormat", "clangFrontend", "clangFrontendTool", "clangHandleCXX", "clangHandleLLVM", "clangIndex", "clangIndexSerialization", "clangInterpreter", "clangLex", "clangParse", "clangRewrite", "clangRewriteFrontend", "clangSema", "clangSerialization", "clangStaticAnalyzerCheckers", "clangStaticAnalyzerCore", "clangStaticAnalyzerFrontend", "clangSupport", "clangTesting", "clangTooling", "clangToolingASTDiff", "clangToolingCore", "clangToolingInclusions", "clangToolingInclusionsStdlib", "clangToolingRefactoring", "clangToolingSyntax", "clangTransformer", "DynamicLibraryLib", "Kaleidoscope-Ch4", "Kaleidoscope-Ch5", "Kaleidoscope-Ch6", "Kaleidoscope-Ch7", "Kaleidoscope-Ch8", "Kaleidoscope-Ch9", "libclang", "lldCOFF", "lldCommon", "lldELF", "lldMachO", "lldMinGW", "lldWasm", "LLVM-C", "LLVMAArch64AsmParser", "LLVMAArch64CodeGen", "LLVMAArch64Desc", "LLVMAArch64Disassembler", "LLVMAArch64Info", "LLVMAArch64Utils", "LLVMAggressiveInstCombine", "LLVMAMDGPUAsmParser", "LLVMAMDGPUCodeGen", "LLVMAMDGPUDesc", "LLVMAMDGPUDisassembler", "LLVMAMDGPUInfo", "LLVMAMDGPUTargetMCA", "LLVMAMDGPUUtils", "LLVMAnalysis", "LLVMARMAsmParser", "LLVMARMCodeGen", "LLVMARMDesc", "LLVMARMDisassembler", "LLVMARMInfo", "LLVMARMUtils", "LLVMAsmParser", "LLVMAsmPrinter", "LLVMAVRAsmParser", "LLVMAVRCodeGen", "LLVMAVRDesc", "LLVMAVRDisassembler", "LLVMAVRInfo", "LLVMBinaryFormat", "LLVMBitReader", "LLVMBitstreamReader", "LLVMBitWriter", "LLVMBPFAsmParser", "LLVMBPFCodeGen", "LLVMBPFDesc", "LLVMBPFDisassembler", "LLVMBPFInfo", "LLVMCFGuard", "LLVMCFIVerify", "LLVMCodeGen", "LLVMCodeGenTypes", "LLVMCore", "LLVMCoroutines", "LLVMCoverage", "LLVMDebugInfoBTF", "LLVMDebugInfoCodeView", "LLVMDebuginfod", "LLVMDebugInfoDWARF", "LLVMDebugInfoGSYM", "LLVMDebugInfoLogicalView", "LLVMDebugInfoMSF", "LLVMDebugInfoPDB", "LLVMDemangle", "LLVMDiff", "LLVMDlltoolDriver", "LLVMDWARFLinker", "LLVMDWARFLinkerParallel", "LLVMDWP", "LLVMExecutionEngine", "LLVMExegesis", "LLVMExegesisAArch64", "LLVMExegesisMips", "LLVMExegesisPowerPC", "LLVMExegesisX86", "LLVMExtensions", "LLVMFileCheck", "LLVMFrontendHLSL", "LLVMFrontendOpenACC", "LLVMFrontendOpenMP", "LLVMFuzzerCLI", "LLVMFuzzMutate", "LLVMGlobalISel", "LLVMHexagonAsmParser", "LLVMHexagonCodeGen", "LLVMHexagonDesc", "LLVMHexagonDisassembler", "LLVMHexagonInfo", "LLVMInstCombine", "LLVMInstrumentation", "LLVMInterfaceStub", "LLVMInterpreter", "LLVMipo", "LLVMIRPrinter", "LLVMIRReader", "LLVMJITLink", "LLVMLanaiAsmParser", "LLVMLanaiCodeGen", "LLVMLanaiDesc", "LLVMLanaiDisassembler", "LLVMLanaiInfo", "LLVMLibDriver", "LLVMLineEditor", "LLVMLinker", "LLVMLTO", "LLVMMC", "LLVMMCA", "LLVMMCDisassembler", "LLVMMCJIT", "LLVMMCParser", "LLVMMIRParser", "LLVMNVPTXCodeGen", "LLVMNVPTXDesc", "LLVMNVPTXInfo", "LLVMObject", "LLVMObjectYAML", "LLVMOption", "LLVMOrcJIT", "LLVMOrcShared", "LLVMOrcTargetProcess", "LLVMPasses", "LLVMProfileData", "LLVMRemarks", "LLVMRuntimeDyld", "LLVMScalarOpts", "LLVMSelectionDAG", "LLVMSupport", "LLVMSymbolize", "LLVMTableGen", "LLVMTableGenCommon", "LLVMTableGenGlobalISel", "LLVMTarget", "LLVMTargetParser", "LLVMTextAPI", "LLVMTransformUtils", "LLVMVEAsmParser", "LLVMVECodeGen", "LLVMVectorize", "LLVMVEDesc", "LLVMVEDisassembler", "LLVMVEInfo", "LLVMWebAssemblyAsmParser", "LLVMWebAssemblyCodeGen", "LLVMWebAssemblyDesc", "LLVMWebAssemblyDisassembler", "LLVMWebAssemblyInfo", "LLVMWebAssemblyUtils", "LLVMWindowsDriver", "LLVMWindowsManifest", "LLVMX86AsmParser", "LLVMX86CodeGen", "LLVMX86Desc", "LLVMX86Disassembler", "LLVMX86Info", "LLVMX86TargetMCA", "LLVMXCoreCodeGen", "LLVMXCoreDesc", "LLVMXCoreDisassembler", "LLVMXCoreInfo", "LLVMXRay", "LTO", "Remarks", "glfw3") --输出在当前目录
只编译一个最小的
#include <常用> #include "clang/AST/ASTConsumer.h" #include "clang/AST/RecursiveASTVisitor.h" #include "clang/Frontend/CompilerInstance.h" #include "clang/Frontend/FrontendAction.h" #include "clang/Tooling/Tooling.h" using namespace clang; class FindNamedClassVisitor : public RecursiveASTVisitor<FindNamedClassVisitor> { public: explicit FindNamedClassVisitor(ASTContext *Context) : Context(Context) {} bool VisitCXXRecordDecl(CXXRecordDecl *Declaration) { if (Declaration->getQualifiedNameAsString() == "n::m::C") { FullSourceLoc FullLocation = Context->getFullLoc(Declaration->getBeginLoc()); if (FullLocation.isValid()) llvm::outs() << "Found declaration at " << FullLocation.getSpellingLineNumber() << ":" << FullLocation.getSpellingColumnNumber() << " "; } return true; } private: ASTContext *Context; }; class FindNamedClassConsumer : public clang::ASTConsumer { public: explicit FindNamedClassConsumer(ASTContext *Context) : Visitor(Context) {} virtual void HandleTranslationUnit(clang::ASTContext &Context) { Visitor.TraverseDecl(Context.getTranslationUnitDecl()); } private: FindNamedClassVisitor Visitor; }; class FindNamedClassAction : public clang::ASTFrontendAction { public: virtual std::unique_ptr<clang::ASTConsumer> CreateASTConsumer( clang::CompilerInstance &Compiler, llvm::StringRef InFile) { return std::make_unique<FindNamedClassConsumer>(&Compiler.getASTContext()); } }; int main() { 串 a{"aa.cpp"},b; 至冲(a,b); clang::tooling::runToolOnCode(std::make_unique<FindNamedClassAction>(), b); }
这里,还需要