Microsoft Visual Studio IDE開發工具集,目前已推出多個不同版本,從之前的VC4.0到現在的VS2015,各個版本都會或多或少的功能或性能上的修改、提升,具體的改進地方可去官網了解;
但無論如何,其始終只是一個開發工具,幫助開發人員快速、高效地完成工作,合理而有效的利用開發工具便成為利器,較為舊版本的VS IDE可以認為淘汰了;
故以下針對VS2008、VS2010至VS2015等版本進行的VC++開發等相關了解、學習;
部分文件識別:
VS2008 新建項目后會產生相應的文件sln、ncb、suo、以及相應項目工程文件夾,項目工程文件夾下包括vcproj、filters、ReadMe.txt、targetver.h、stdafx.h、stdafx.cpp及其他文件,
若是MFC工程,可能還有rc文件、Resource.h文件以及res文件夾下的rc2、ico資源文件等;
VS2010/VS2010/VS2012/VS2013 新建項目后會產生文件sln、suo、sdf、ipch文件夾下的ipch文件、項目工程文件夾下包括vcxproj、vcxproj.user、filters、ReadMe.txt、targetver.h、stdafx.h、stdafx.cpp及其他文件,
若是MFC工程,可能還有rc、aps、Resource.h文件以及res文件夾下的rc2、ico資源文件等;
VS2015 新建項目時會產生sln、VC.db、VC.VC.opendb、ipch文件夾下的ipch文件、.vs文件夾下的.suo文件,項目工程文件夾下包括vcxproj、vcxproj.user、filters、ReadMe.txt、targetver.h、stdafx.h、stdafx.cpp及其他文件,
若是MFC工程,可能還有rc、aps、Resource.h文件以及res文件夾下的rc2、ico資源文件等;
另外以上IDE下,對於其他工程類型的還有dllmain.cpp、def、props/vsprops文件等;
此外各個工程編譯、鏈接、生成過程中的各種中間文件、調試文件、最終文件等,比較常見的pdb、ilk、obj、log、pch、exe、lib、dll、exp、manifest,而某些中間文件可以不用理會;
以上提到的分別簡單說明記錄一下,僅供了解;
sln:解決方案文件,主要包括工程項目組織結構、位置、工程編譯環境配置等信息,具體感興趣的可以去http://blog.csdn.net/beijiguangyong/article/details/6460586了解;其記錄的信息不算多;
ncb:(no compile browser)VC++自動創建的信息跟蹤文件,可以刪除,重新打開解決方案后會自動再次創建,此文件一般比較大;
suo:儲存了用戶界面的自定義配置,包括布局、斷點和項目最后編譯的而又沒有關掉的文件等,以便下一次你打開Visual Studio可以恢復這些設置,一般為隱藏文件;
sdf:解決方案工程信息數據庫文件,此文件同ncb文件,都比較大,也可以刪除,重新打開解決方案后會自動創建,主要提供提供的智能感知、代碼恢復等信息;
ipch:主要保存預編譯的頭文件和智能提示信息用的,也可以刪除,重新打開解決方案后會自動創建;
VC.db:SQLite3格式的文件,里面應是項目相關的文件信息,同ncb、sdf文件,一般比較大可刪除,重新打開解決方案后會自動創建;
VC.VC.opendb:此文件在項目打開的時候創建,關閉的時候自動刪除,目前作用未知;
vcproj、vcxproj:項目工程文件,里面包含的該工程的工具集、工程編譯、鏈接、調試等相關的配置;不同VS IDE的項目轉化,可以通過修改此文件實現,低版本轉高版本IDE,則直接打開即可,而高版本轉到低版本需要修改工程文件,另外版本間轉化可能會出現某些API使用等限制,可能需要修改、替換;vcproj與vcxproj內容、結構還是有所差異,轉化時需要修改的地方比較多,如果修改的地方比較多,可以重新建立工程將相應文件添加進去,修改工程屬性也可;
vcxproj.user:不同用戶有不同的本地用戶配置,主要是一些窗體布局、位置等,與項目具體內容一般無關,可刪除;
filters:一般為虛擬目錄,及項目工程解決方案視圖下分類過濾器目錄,一般不要刪除,否則可能導致所有文件雜糅在一起;
ReadMe.txt:里面主要是一些工程創建時向導產生的各個文件描述信息;
targetver.h:主要定義程序運行的環境,如限制程序、定制版本,如WINVER、_WIN32_WINNT、_WIN32_WINDOWS、_WIN32_IE等宏定義,此外有的版本還包括SDKDDKVer.h或WinSDKVer.h平台版本控制;
stdafx.h:包含targetver.h,可定義或聲明一些公用函數、宏、結構、需要的頭文件等信息,因各個cpp一般會包含引用stdafx.h,故以此實現控制各個cpp文件中可能用到的宏控制等以及預編譯;
stdafx.cpp:很少做其他的用途,一般只是#include "stdafx.h",已生成pch預編譯頭,當然用戶也可以根據需要做其他的功能實現等,采用預編譯頭文件方式,從而可以加速編譯過程;
rc/rc2:資源文件,應用程序中用到的所有的資源,其中rc文件中的資源可以直接在VC集成環境中以可視化的方法進行編輯和修改,rc2則可根據需要只能手動修改,一般使用的時候可根據需要在rc文件中包含rc2文件;
rc2文件可以單獨獨立提出來,供不同工程項目rc文件include使用而不用每個工程都去創建相同的rc2文件內容,不同項目工程應有自己的rc文件,事實上rc文件中還可以包含其他的rc文件;
aps:主要記錄資源信息, aps可以刪除,進入程序,重新打開解決方案后會自動生成;
ico:應用程序的圖標資源文件;
dllmain.cpp:DLL應用程序的入口點,這里邊可以做一些庫第一次加載、卸載,以及新線程加載該庫時執行的相關的工作,比如通信socket、某些全局變量、共享資源、掛鈎等管理;
def:一般是用作動態庫導出文件,里面主要包含導出庫名、描述、導出的各個函數;若不使用export導出函數或類,可采用def的方式也比較簡單,而且還可以導出相同函數地址的不同得名稱,其可防止導出函數重命名,以供其他編程語言或工具使用;
props/vsprops:工程屬性表文件,后者為vs2008的,前者為vs2010及以后版本的,其主要包含工程屬性配置相關,可以單獨提取出來供不同工程項目公共使用;
pdb:調試的符號文件,用於保存調試的信息供VS IDE調試使用;
ilk:增量鏈接期間產生的臨時文件,若取消生成,則可能導致編譯鏈接比較慢;
obj:c、cpp編譯后的二進制目標文件,內部包含程序相對地址,在鏈接階段加入link與相關lib等鏈接,可生產exe文件;
log:主要記錄編譯過程中的輸出信息、日志;
exe:編譯、鏈接后產生的可執行文件,當然也可以是庫,exe相對obj來說,前者提供的是絕對地址,而后者只是提供相好地址;
lib:生成的靜態庫文件或者動態庫dll的引入庫文件;
dll:生成的動態庫dll;
exp:生成動態庫dll時的臨時導出庫,主要用在多個庫相應引用鏈接時,供IDE使用;一般客戶或開發人員不會使用到該文件;
manifest:VS提供的程序部署、清單文件,內部定義了程序運行時的依賴關系、依賴的文件庫,如CRT、MFC庫名稱和版本等信息;
重要文件說明:
pdb:調試的符號文件,程序數據庫 (PDB) 文件保存着調試和項目狀態信息,使用這些信息可以對程序的調試配置;具體可以參見另外一篇文章《Microsoft Visual Studio PDB文件相關事宜》。
obj:c、cpp編譯后的二進制目標文件,一般提供給IDE鏈接用的,當然也可以將其發給客戶或開發人員使用並提供h頭文件,不過這樣的做法很少,一般給用戶的是編譯后的dll或exe;
lib:分為靜態庫文件和動態庫dll的引入庫文件,前者供其他模塊或程序靜態鏈接,后者只是提供方便的隱式鏈接而不是調用LoadLibrary和頻繁的GetProcessAddress;
dll:動態庫文件,供客戶或其他開發人員使用,一般附加h頭文件,或者某些還提供lib引入庫或def文件;def獲取到lib可參見另外一篇文章《通過dll或def文件提取lib導入庫文件》介紹使用說明;
manifest:VS提供的程序部署、清單文件,在早些時候編譯的Debug或Release版本的程序時需要提供該清單文件,不過可以通過配置工程屬性實現程序的內嵌該清單文件,此外還可以根據需要提供額外的其他清單文件;具體的使用、注意事項可以參見另外一篇文章《Microsoft Visual Studio 開發的C++程序軟件發布相關事宜》;
props/vsprops:工程屬性表文件,具體可參見另外一篇文章《Microsoft Visual Studio 工程屬性表props/vsprops創建與使用》;
小結:在實際的項目開發中需要了解並掌握常用的工程屬性配置、VS提供的各種工具、快捷鍵操作、常用插件使用、文件識別與修改、調試跟蹤、優化、版本管理等;更為重要的還是設計、編碼實現上;
此后將針對各個重要的環節進行簡單的分析、記錄。