首先,在Visual Studio下打開工程Hilo,在菜單欄中選擇菜單“體系結構->生成依賴關系圖->By Include File”
第一次操作時,有時我們将會發現一個名為“Analyzing Files”的進度框會跳出,提示使用者“代碼正在解析中”,如圖:
稍等片刻後,如下的DGML有向圖将會生成,這張圖除了展示工程Browser和Common内部源檔案與頭檔案的Include關系外,還顯示了工程之間,工程與外部頭檔案的Include引用關系。
下面我将會使用自頂向下的方式給您解釋如何去閱讀和分析這張圖。點選該圖右鍵菜單”分組->全部折疊”,我們将會得到下圖:
這張圖很清晰地告訴我們在目前解決方案中包含2個C++工程,分别是Browser和Common。Browser���包含61個源檔案/頭檔案,而 Common中源檔案/頭檔案的數量是29。工程Browser中的源檔案Include了工程Common和”外部”中的頭檔案,而工程Common僅僅Include了“外部”中的頭檔案。這裡的browser.vcxproj和common.vcxproj比較容易了解,分别包含了這兩個工程中所有的源檔案和頭檔案,而在”外部”這個結點中,則包括了所有被工程Browser和common所Include,但不屬于這兩個項目的頭檔案.讓我們展開”外部”節點, 我們發現其中包含2個名為“Windows SDK”和”C/C++Standard Library”的子節點,如圖:
為了區分不同庫的頭檔案,我們根據頭檔案所屬領域的不同,我們将外部引用的頭檔案分為兩類:“Windows SDK”和“C/C++ Standard Library”。節點“Windows SDK”下包含存儲路徑在“%WindowsSdkDir%\include”下的頭檔案,而節點“C/C++ Library”下的頭檔案的存儲路徑為“%VSINSTALLDIR%\vc\include”。在這裡,工程Browser和Common Include的總共引用了“Window SDK”的13個頭檔案,工程Browser和Common,以及“Windows SDK”庫引用了“C/C++ Standard Library”的 12個頭檔案。
從上面的圖中,我們可以了解到整個解決方案的Include依賴關系圖的結構。然而,這個圖中有如此多的節點,我們如何來檢視我們想要了解的某一個或一些檔案的Include依賴關系呢?首先,我們可以通過Ctrl+F來找到我們想要找到的檔案。按下Ctrl+F,然後輸入 “carouselpane.h”, Visual Studio将自動幫我們定位到所在的節點(如下圖),同時與該連結相連的所有連結将會被高亮,連結箭頭方向代表Include關系,如圖:
源檔案“carouselpane.cpp”include了頭檔案”carouselpane.h”,在圖中将會有條始于節點 “carouselpane.cpp”,終于節點“carouselpane.h”的有向連結。停留滑鼠在該連結上,顯示“導向按鈕”,點選“導向按鈕” 中的“+”,我們将會被帶到源代碼檔案”CarouselPane.cpp”
在源代碼檔案”carouselpane.cpp”中,代碼行#include “CarouselPane.h”被自動選中,這個操作诠釋了源檔案“carouselpane.cpp”與“carouselpane.h”的 Include關系。點選右鍵菜單“檢視内容”,頭檔案“carouselpane.h”将會被打開,
在打開的頭檔案“carouselPane.h”中,點選右鍵菜單“Generate Graph of Include Files”,一張關于頭檔案carouselPane.h Include”和Include By的依賴圖将會産生,如下圖:
該圖所表達的語義是工程Browser下“Carouselpane.h”頭檔案被3個.cpp檔案Include的,并且該檔案Include了 8個.h檔案。 這樣,通過這樣的子圖,我們就能夠比較友善地看到某個檔案的Include和Include By依賴關系圖了。
總結:
“Include”依賴圖提供了一種以圖形化方式顯示源檔案與頭檔案間“Include”關系的方式,基于解決方案生成的“Include”圖可以幫我們了解工程間以及工程與庫頭檔案的“Include”關系,而基于單個檔案的“Include”圖可以幫我們進一步了解單個檔案的“Include”和 “Include By”依賴關系。