2008-09-03 50 views
141

有什麼好的建議?輸入將是頭文件的名稱,輸出應該是所有文件的列表(最好是樹),包括它直接或間接。跟蹤#包括依賴關係的工具

+0

這是類似的(但不是複印件)http://stackoverflow.com/questions/74326/how-should-i-detect-unnecessary-include-files- in-a-large-c-project – 2013-10-09 17:36:22

+4

這不是關於「最喜歡的」包含在gcc中很好地顯示,但msvs不包含。所以我們(我)正在尋找任何工具。 – fantastory 2014-10-13 08:07:59

+28

爲什麼我一直在尋找「離題」問題有幫助? – jfritz42 2015-09-30 16:08:39

回答

123

如果您有權訪問GCC/G ++,那麼-M option將輸出相關性列表。它不會執行其他工具所做的任何其他工作,但由於它來自編譯器,因此它不可能從「錯誤」的地方拾取文件。

26

對於重量級的解決方案,您應該查看Doxygen。它掃描你的代碼庫,並且有效地提供一個網站,它記錄你的代碼。它顯示的許多事情之一是包括樹木。

如果您希望能夠將此工具的輸出插入其他進程,那麼這可能對您無效(儘管Doxygen輸出爲其他格式,但我並不熟悉該功能)。但是,如果你只是想要注視依賴關係,它應該很好。

19

我玩過一個名爲cinclude2dot的工具。當我來這裏工作時,在處理相當大的代碼庫時非常有用。我其實已經考慮過將它整合到我們的日常構建中。

2

Understand for C++應該能夠幫助你:它建立一個你可以從Perl訪問的數據庫。

85

感謝KeithB。我查找了cl.exe文件(VS2008)並找到/ showIncludes標誌。在IDE中,可以從任何CPP文件的屬性頁面中進行設置。

Screen shot

10

好消息:redhat Source-Navigator(在Windows上運行過)。當然,編譯器開關(前面提到)具有更好的解析功能,我不確定這將如何處理MFC,Qt及其魔術關鍵字。

redhat Source-Navigator

1

的cscope(http://cscope.sourceforge.net/)這是否在一個獨立的xterm,而且還可以將喜歡的編輯器內部使用 - 它有很大的Emacs和vi/vim的支持。

3

大廈KeithB's answer,這裏是gnumake的語法自動1)生成依賴文件,2)讓他們最新的,和3)使用它們在你的Makefile:

.dep: 
    mkdir [email protected] 
.dep/%.dep: %.c .dep 
    (echo [email protected] \\; $(CC) $(IFLAGS) -MM $<) > [email protected] || (rm [email protected]; false) 
.dep/%.dep: %.cpp .dep 
    (echo [email protected] \\; $(CXX) $(IFLAGS) -MM $<) > [email protected] || (rm [email protected]; false) 
DEPEND := $(patsubst %.dep,.dep/%.dep,$(OBJ:.o=.dep)) 
-include $(DEPEND) 

(請務必更改)

12

首先,cinclude2dot.pl是一個perl腳本,用於分析C/C++代碼並生成#include依賴關係圖作爲點文件以輸入到graphviz中。

http://www.flourish.org/cinclude2dot/

如果你不想去那種手工工具的方式,那麼目前的贏家雙手向下在我看來是被稱爲從ProFactor「IncludeManager」的工具。

http://www.profactor.co.uk/includemanager.php

有一個免費試用,這是真棒。它是Visual Studio的一個插件,它完全集成了,所以雙擊這裏的某些東西就可以將它帶到它所在的地方。

工具提示鼠標懸停可爲您提供所需的所有信息,它可讓您向下鑽取/向上鑽取,移除您不關心的整個子樹,查看圖表以外的表示,循環瀏覽匹配列表以及,這太棒了。

如果您對此有所瞭解,可以在試用結束之前重構大型項目的#include結構。即便如此,它的成本並不高,大約每個許可證35美元。

它的功能就是完美。不僅包括#include圖表,還可以交叉共享文件的項目依賴關係,影響構建時間,網格中的詳細屬性,完美。