1. 程式人生 > >visual C++ 專案和解決方案的區別

visual C++ 專案和解決方案的區別

專案:
        專案是構成某個程式的全部元件的容器,該程式可能是控制檯程式、基於視窗的程式或某種別的程式。程式通常由一個或多個包含使用者程式碼的原始檔,可能還要加上包含其它輔助資料的檔案組成。某個專案的所有檔案都儲存在相應的專案資料夾中,關於專案的詳細資訊儲存在一個副檔名為.vcproj的xml檔案中,該檔案同樣儲存在相應的專案資料夾中。專案資料夾還包括其它資料夾,它們用來儲存編譯及連結專案時所產生的輸出。

解決方案:
        顧名思義,解決方案的含義是一種將所有程式和其它資源(它們是某個具體的資料處理問題的解決方案)聚集到一起的機制。例如,用於企業經營的分散式訂單錄入系統可能由若干個不同的程式組成,而各個程式是作為同一個解決方案內的專案開發的,因此,解決方案就是儲存與一個或多個專案有關的所有資訊的資料夾,這樣就有一個或多個專案資料夾是解決方案資料夾的子資料夾。與解決方案中專案有關的資訊儲存在副檔名為.sln和.suo的兩個檔案中。
當建立某個專案時,如果沒有選擇在現有的解決方案中新增該專案,那麼系統將自動建立一個新的解決方案。

        當建立專案及解決方案時,可以在同一個解決方案中新增更多的專案。我們可以在現有的解決方案中新增任意種類的專案,但通常只新增與該解決方案內現有專案相關的專案。一般來說,各個專案都應該有自己的解決方案,除非我們有很好的理由不這樣做。

        VS2010建立專案時,預設的專案資料夾的名稱與專案名稱相同,該資料夾還將容納構成該專案定義的檔案。如果不修改的話,解決方案資料夾具有與專案資料夾相同的名稱,其中包含了專案資料夾、定義解決方案內容的檔案。解決方案資料夾內包含如下四個檔案:

•副檔名為.sln的檔案,記錄著關於解決方案中專案的資訊。
•副檔名為.suo的檔案,其中記錄著應用於該解決方案的使用者選項。
•副檔名為.sdf的檔案,記錄著與解決方案的Intellisense有關的資料。Intellisense是在Editor視窗中輸入程式碼時提供自動完成和提示功能的工具。
•副檔名為.opensdf的檔案,記錄著關於專案狀態的資訊,此檔案只在專案處於開啟狀態時才有。

專案資料夾中的Readme.txt檔案包含已經為該專案建立的所有檔案的內容摘要。

        構建專案時建立的檔案:

        構建專案完成後將看到解決方案資料夾中出現了一個新的子資料夾Debug。該資料夾包含剛才構建專案時產生的輸出,這個資料夾包含三個檔案。

•.exe檔案:可執行檔案
•.ilk檔案:在重新構建專案時被連結器使用,它使連結器能夠根據修改的原始碼生成的目標檔案增量的連結到現有的.exe檔案,從而避免每次修改程式時都重新連結所有檔案。
•.pdb檔案:包含除錯資訊,在除錯模式中執行程式要使用該除錯資訊。在除錯模式中,可以動態檢查程式執行過程中所生成的資訊。

        在專案資料夾中也有一個Debug目錄,它包含在構建過程中生成的很多檔案,從Windows Explorer的Type描述中可以看到它們包含何種資訊。

ipch資料夾和.sdf檔案是什麼?

        ipch的資料夾,和一個與工程同名的.sdf檔案,而且ipch下面的檔案和.sdf檔案都很大,這些檔案是Visual Studio用來儲存預編譯的標頭檔案和Intellisense用的,刪除這些檔案對於工程的開發完全沒有影響。那如果我既想使用預編譯的標頭檔案和Intellisense,又不想看到這些無聊的檔案該怎麼辦呢?
        工具->選項->文字編輯器->C/C++ ->高階->回退位置 那裡,兩個都設成true
        如果你設定了回退位置,那麼IPCH等就會到那裡去,否則會在系統TEMP裡,有個VC++資料夾下。

VS2010解決方案和工程檔案的另一種解釋:
將所有檔案分為6個部分:解決方案相關檔案、工程相關檔案、應用程式標頭檔案和原始檔、資原始檔、預編譯標頭檔案和編譯連結生成檔案。

1.解決方案相關檔案

解決方案相關檔案包括解決方案資料夾下的.sdf檔案、.sln檔案、.suo檔案和ipch資料夾。

.sdf檔案和ipch目錄一般佔用空間比較大,幾十兆甚至上百兆,與智慧提示、錯誤提示、程式碼恢復、團隊本地倉庫等相關。如果你覺得不需要則可以設定不生成它們,方法是點選選單欄Tools->Options,彈出Options對話方塊,選擇左側面板中Text Editor->C/C++->Advanced,右側列表中第一項Disable Database由False改為True就可以了,最後關閉VS2010再刪除.sdf檔案和ipch目錄以後就不會再產生了。但關閉此選項以後也會有很多不便,例如寫程式時的智慧提示沒有了。

.sln檔案和.suo檔案為MFC自動生成的解決方案檔案,它包含當前解決方案中的工程資訊,儲存解決方案的設定。

2.工程相關檔案

工程相關檔案包括工程資料夾下的.vcxproj檔案和.vcxproj.filters檔案。

.vcxproj檔案是MFC生成的工程檔案,它包含當前工程的設定和工程所包含的檔案等資訊。.vcxproj.filters檔案存放工程的虛擬目錄資訊,也就是在解決方案瀏覽器中的目錄結構資訊。

3.應用程式標頭檔案和原始檔

應用程式嚮導會根據應用程式的型別(單文件、多文件或基於對話方塊的程式)自動生成一些標頭檔案和原始檔,這些檔案是工程的主體部分,用於實現主框架、文件、檢視等。

下面分別簡單介紹下各個檔案:http://hovertree.com/menu/cpp/
HelloWorld.h:應用程式的主標頭檔案。主要包含由CWinAppEx類派生的CHelloWorldApp類的宣告,以及CHelloWorldApp類的全域性物件theApp的宣告。
HelloWorld.cpp:應用程式的主原始檔。主要包含CHelloWorldApp類的實現,CHelloWorldApp類的全域性物件theApp的定義等。
MainFrm.h和MainFrm.cpp:通過這兩個檔案從CFrameWndEx類派生出CMainFrame類,用於建立主框架、選單欄、工具欄和狀態列等。
HelloWorldDoc.h和HelloWorldDoc.cpp:這兩個檔案從CDocument類派生出文件類CHelloWorldDoc,包含一些用來初始化文件、序列化(儲存和裝入)文件和除錯的成員函式。

HelloWorldView.h和HelloWorldView.cpp:它們從CView類派生出名為CHelloWorldView的檢視類,用來顯示和列印文件資料,包含了一些繪圖和用於除錯的成員函式。
ClassView.h和ClassView.cpp:由CDockablePane類派生出CClassView類,用於實現應用程式介面左側面板上的Class View。
FileView.h和FileView.cpp:由CDockablePane類派生出CFileView類,用於實現應用程式介面左側面板上的File View。
OutputWnd.h和OutputWnd.cpp:由CDockablePane類派生出COutputWnd類,用於實現應用程式介面下側面板Output。
PropertiesWnd.h和PropertiesWnd.cpp:由CDockablePane類派生出CPropertiesWnd類,用於實現應用程式介面右側面板Properties。
ViewTree.h和ViewTree.cpp:由CTreeCtrl類派生出CViewTree類,用於實現出現在ClassView和FileView等中的樹檢視。

4.資原始檔
一般我們使用MFC生成視窗程式都會有對話方塊、圖示、選單等資源,應用程式嚮導會生成資源相關檔案:res目錄、HelloWorld.rc檔案和Resource.h檔案。
res目錄:工程資料夾下的res目錄中含有應用程式預設圖示、工具欄使用圖示等圖示檔案。
HelloWorld.rc:包含預設選單定義、字串表和加速鍵表,指定了預設的About對話方塊和應用程式預設圖示檔案等。