2017-04-02 57 views
0

我使用Clang :: Tooling庫來解析某些頭文件。由於clang沒有預處理頭文件和其他預處理器,我似乎無法正確解析。我如何告訴Clang :: Tooling在解析之前預處理文件。乾杯。這是我調用我的工具的當前代碼。Clang Tooling預處理源文件

/*static*/ SAST SAST::Parse(CFile& HeaderFile, const TArray<CString>& CommandLineArgs) 
{ 
    //Our Custom Formated Ast Data Struct 
    SAST AST; 

    //Parse Command-Line Args. 
    clang::tooling::CommandLineArguments CommandArgs; 
    for (auto& Item : CommandLineArgs) 
     CommandArgs.push_back(Item.GetRaw()); 

    //Traverse And Collect AST 
    auto SourceText = HeaderFile.GetText(); 
    auto SourceFileName = HeaderFile.GetFullName(); 
    clang::tooling::runToolOnCodeWithArgs(new CollectASTAction(&AST), SourceText.GetRawConst(), CommandArgs); 

    return AST; 
} 

回答

0

顯然它實際上是試圖預處理文件。由於沒有打開控制檯窗口,我看不到任何錯誤報告。但是,當我檢查llvm :: raw_fd_ostream類的write()方法與斷點時,我可以看到錯誤正在編寫,如「FileXXX.h無法找到」。所以它根本找不到#包括文件。這就是爲什麼預處理沒有執行/完成。感謝大家。這解決了我一天漫長的旅程。