我工作在一箇中等規模的C/C++項目上,我已經應用了Doxygen + Graphviz。它的標題圖很有用,但它們只顯示基於#include
的關係。我感興趣的是找到一個(最好是基於Linux的)工具,它不僅基於#include
分析文件依賴性,還基於實際的符號使用情況。例如,這樣的工具不僅會顯示a.cpp
包括b.h
,而且a.cpp
使用SomeClass
,它在b.h
包含的c.h
中聲明。它也能夠建議標題包括可能被修剪。「深」標題依賴性分析
21
A
回答
18
我以前用過Include What You Use,效果不錯。它使用Clang來解析C++代碼,並建議轉發聲明以添加並刪除頭文件。
一個缺點是它會對代碼的佈局做出假設 - 基本上就是Google的編碼標準。所以如果你有一個名爲SomeClass.cpp
的文件,它只會看到SomeFile.h
。此外,建議包括使用來自項目根目錄的完整路徑(因此#include "src/SomeClass.h"
而不是#include "SomeClass.h"
)。最後,我改變了我的代碼到這個慣例,因爲它避免了含糊不清,但它需要一個頭,以防萬一你嘗試它。
通常你可以設置CC=include-what-you-use
並重建得到結果 - 它使用所有的clang機制來解析-I
包含參數。有一個Python程序使用結果來自動更新#include行。
編輯:
另一種工具,它並不像複雜,但比較簡單的設置和可以建議#include
s到刪除是deheader。它通過將C++文件複製到臨時位置,刪除#include
並重新編譯。如果重新編譯工作,那麼刪除該頭文件是安全的。它不會做的是提出前向聲明或任何幻想,但它可以減少實現文件中不必要的包含行。
相關問題
- 1. 依賴鏈分析
- 2. 依賴性問題
- 3. frama-c影響分析不能分析控制依賴性嗎?
- 4. LLVM內存依賴性分析中的讀取依賴性後讀取
- 5. require.js依賴分析工具
- 6. 功能依賴分析
- 7. 依賴性問題:Google Play
- 8. 溫莎依賴性問題
- 9. Autofac依賴性解析錯誤
- 10. Webpack依賴性處理(無法解析'..')
- 11. 如何創建依賴性解析
- 12. 無法解析的Android依賴問題
- 13. Maven的依賴,插件分析
- 14. 依賴關係分析警告 - XCODE 5
- 15. PHP依賴代碼度量分析
- 16. java依賴關係分析工具
- 17. Python的依賴關係分析庫
- 18. C:函數的依賴關係分析
- 19. 俄語的現代依賴分析器
- 20. 依賴分析段落圖解
- 21. 依賴分析錯誤,XCode 4.6
- 22. (Visual)C++項目依賴關係分析
- 23. 分析clojure程序的依賴關係
- 24. 使用LLVM進行數據和環路依賴性分析
- 25. OpenACC編譯器是強制性依賴分析嗎?
- 26. 需要Java程序包依賴性分析工具
- 27. 使用Sonar(或其他)進行測試的依賴性分析
- 28. 單元測試和依賴注入深度嵌套依賴
- 29. ScriptBundle依賴性
- 30. 依賴屬性
看起來很有前途,雖然它沒有安裝二進制文件是一個真正的痛苦。當我開始編譯llvm時,它充滿了我的硬盤容量。 – Reinderien 2011-05-04 21:38:12
@Reinderien結賬和建立llvm + clang是「僅」在1Gb左右,記得要通過 - 啓用優化到配置腳本。調試版本將使您回到4Gb左右。 – richq 2011-05-05 07:07:46
我終於能夠建立IWYU了 - 是的,它笨重,笨拙等等,但總比沒有好。我也會看看deheader。謝謝 – Reinderien 2011-05-06 00:05:19