我有一個使用libtooling的現有和可用的源代碼修改工具。現在我想把這個工具集成到clang中,這樣用戶就可以編譯修改過的源代碼,而不用將它保存在某個地方。使用叮噹插件更改源代碼
修改的部分是沒有問題的,匹配器+重寫器的工作方式相同鏗鏘,我的問題是如何告訴編譯器我的變化後重新分析源代碼。
我迄今爲止的進展:
- 我發現cve-dev交談,但沒有具體的信息,該怎麼辦呢
- 我還發現clang::ASTUnit::Reparse,但我無法弄清楚如何調用它。在叮噹中沒有任何東西使用它,我的每一次嘗試都得到了崩潰的回報。
- 有在StackOverflow上過類似的問題,但沒有一個很好的答案
- 有一些插件工具,如traces,它做同樣的修改源,但它只是調用編譯兩次。
我希望基於前兩個最終我找到一個工作解決方案,但也許有人知道答案已經,並可以幫助我一個例子,或至少更具體的說明如何實現它?
不幸的是,我不能以WrapperFrontendAction無需實際修改鐺的源極(FixItRecompile被硬連線到它太)包裹EmitObjAction。或者我錯過了什麼? – Dutow
就我個人而言,我更改了clang源代碼來執行此操作,因此我編譯了一個特殊用途的clang可執行文件。據我所知,如果你想使用clang插件或libtooling,你必須確實添加一些代碼,以暴露可能性來包裝EmitObjAction。 您也可以隨時嘗試在[cfe-dev郵件列表](http://lists.llvm.org/mailman/listinfo/cfe-dev)處詢問。 – Ivan
我想出了一個類似的解決方案(從我的叮噹聲工具中調用clang編譯器)。您的版本當然更易於使用,但它仍然需要我爲每個鏗鏘聲版本進行維護,並且用戶必須下載並指定一個不同的編譯器,而不僅僅是一個插件。我也在郵件列表中提出了這個問題,並在那裏得到了類似的答案。但看起來目前沒有辦法做到這一點,所以我會問他們是否會接受將這種可能性添加到插件的補丁。 – Dutow