經過Daffodil for VS使VS2010的IDE能夠用VC6 VC7.1 VC9等編譯器進行項目編譯

本文內容中的部分資料和知識來源於網絡,具體引用出處不明.網絡

VS的IDE從VC6到VS2010的變化可謂是天翻地覆,最新的VS2010有一個特性就是支持多顯示器開發,這無疑爲咱們的開發帶來很大的便利.ide

VC的各類版本也都有它本身的特色,像VC6就以速度快著稱.工具

隨着操做系統的不斷進化,即便是開發人員對新系統的華麗界面也有所動心.我就是 哈哈.學習

Win7正式發佈以來 一直沒太關注,由於以前嘗試過Vista,被各類挫折戰勝了.去年開始纔算正式踏上了使用Win7的路程ui

結果 Win7仍是挺好用的.不知道Win8正式版發佈之後會不會更好用.操作系統

系統更新換代對應的軟件和各類工具固然最好是跟上腳步,這樣纔算完美.code

手裏有一份遊戲代碼挺大的,不過是VC7.1的工程,一直想以各類手段轉換爲VS2008甚至VS2010的,均已各類莫名其妙的bug亂彈了結.orm

可帶着多臺顯示器作開發,沒有發揮最大用處感受太浪費了.xml

上段時間又把VS2008安裝目錄裏的include lib都替換成VC7.1的嘗試編譯.結果首先就cl.exe報錯.緣由是VS2008的響應文件默認是unicode格式.遊戲

改爲ansi的後基本不報錯了,可是編譯的時候cl.exe常常會出現假死.緣由可能就是部分參數或者響應文件裏的部份內容沒法被正確識別致使的.

因而再次放棄.

這幾天又開始研究Qt這個開源的GUI庫(這麼說有點委屈Qt了,其實Qt不只僅是一個強大的GUI庫而已,裏面還有好多好多值得學習的東西,好比信號/槽模式)

Qt用VS2008 而後那份代碼繼續用VS2003 愈來愈以爲VS2003那IDE界面太老土了.並且拖動子窗口的時候會變得很卡.

因而又去搜尋解決方案,通過堅持不懈的努力,終於在被GFW牆了無數次以後找到了一篇文章.(其實怪本身不細心,若早點想到VS2010爲何要提供一個"平臺工具集"選項就早找到資料了)

跑題太遠了,進入正題:

VS2010是支持使用不一樣版本的VC進行編譯的.只是沒太多人研究而已.

首先從http://daffodil.codeplex.com/ 下載支持工具進行安裝(開源項目,有興趣可自行研究).

安裝完後會在VS2010項目屬性的"平臺工具集"子項那看到再也不是隻有以前的v90和v100了,裏面出現了從v60 v70 v71 v80 就是對應的vc6 vc7 vc7.1 vc8了

固然若是你係統裏已經裝過了這些版本,那直接就能夠用了,不用任何額外設置.

下面的狀況是針對系統只裝了vs2010的機器

"平臺工具集"每一個版本都須要有各自的include lib等文件,默認是從註冊表中進行讀取

這些文件就在已裝VS版本主目錄下的VC目錄裏.好比include crt atlmfc lib這些文件夾,能夠去別電腦裏拷貝過來

另外,編譯時還須要指定版本的bin文件,好比cl.exe link.exe,其中cl.exe還會須要合適的mspdb*.dll(*爲特定版本號)等文件

因此還要去Common7目錄下的IDE目錄裏去找這些文件.

總之,每一個版本有本身的include lib等文件的同時還要保證編譯器 連接器等能正常運行就能夠了.

這些文件都找齊後,接下來就是修改註冊表能讓VS2010找到咱們的文件在哪.

註冊表路徑能夠參考C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\PlatformToolsets下面的v**(版本號)目錄裏的Microsoft.Cpp.Win32.v**.props文件

該文件就是對VS2010中用到的幾個環境變量進行賦值等操做.經常使用的有

$(VSInstallDir) ----VS安裝目錄(某些dll須要用到)

$(VCInstallDir) ----VC安裝目錄(include lib文件等)

$(ExecutablePath) ----可執行工具目錄(cl link等)

以VC7.1爲例

複製代碼

1 <PlatformToolsetVersion>71</PlatformToolsetVersion>
 2     <VCInstallDir>$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\Setup\VC@ProductDir)</VCInstallDir>
 3     <VCInstallDir Condition="'$(VCInstallDir)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\7.1\Setup\VC@ProductDir)</VCInstallDir>
 4     <VCInstallDir Condition="'$(VCInstallDir)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VCExpress\7.1\Setup\VC@ProductDir)</VCInstallDir>
 5     <VCInstallDir Condition="'$(VCInstallDir)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VCExpress\7.1\Setup\VC@ProductDir)</VCInstallDir>
 6     <VSInstallDir>$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\Setup\VS@ProductDir)</VSInstallDir>
 7     <VSInstallDir Condition="'$(VSInstallDir)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\7.1\Setup\VS@ProductDir)</VSInstallDir>
 8     <VSInstallDir Condition="'$(VSInstallDir)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VCExpress\7.1\Setup\VS@ProductDir)</VSInstallDir>
 9     <VSInstallDir Condition="'$(VSInstallDir)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VCExpress\7.1\Setup\VS@ProductDir)</VSInstallDir>
10     <WindowsSdkDir Condition="'$(WindowsSdkDir)' == ''">$(VCInstallDir)PlatformSDK\</WindowsSdkDir>
11     <FrameworkDir Condition="'$(UseEnv)' != 'true'">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework@InstallRoot)</FrameworkDir>
12     <FrameworkDir Condition="'$(FrameworkDir)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework@InstallRoot)</FrameworkDir>
13     <FrameworkSdkDir Condition="'$(UseEnv)' != 'true'">$(VSInstallDir)SDK\v1.1\</FrameworkSdkDir>
14     <FrameworkVersion Condition="'$(UseEnv)' != 'true'">v1.1.4322.573</FrameworkVersion>
15     <ExecutablePath Condition="'$(ExecutablePath)' == ''">$(VCInstallDir)bin;$(VCInstallDir)PlatformSDK\bin;$(VCInstallDir)PlatformSDK\common\bin;$(VSInstallDir)Common7\Tools\bin;$(VSInstallDir)Common7\tools;$(VSInstallDir)Common7\ide;$(ProgramFiles)\HTML Help Workshop;$(FrameworkSDKDir)bin;$(FrameworkDir)$(FrameworkVersion);$(VSInstallDir);$(SystemRoot)\SysWow64;$(FxCopDir);$(PATH);</ExecutablePath>
16     <IncludePath Condition="'$(IncludePath)' == ''">$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(VCInstallDir)PlatformSDK\include;$(VCInstallDir)PlatformSDK\common\include;$(FrameworkSDKDir)include;</IncludePath>
17     <ReferencePath Condition="'$(ReferencePath)' == ''">$(FrameworkDir)$(FrameworkVersion);$(VCInstallDir)atlmfc\lib;</ReferencePath>
18     <LibraryPath Condition="'$(LibraryPath)' == ''">$(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(VCInstallDir)atlmfc\lib\i386;$(VCInstallDir)PlatformSDK\lib;$(VCInstallDir)PlatformSDK\common\lib;$(FrameworkSDKDir)lib;$(VSInstallDir);$(VSInstallDir)lib;</LibraryPath>
19     <SourcePath Condition="'$(SourcePath)' == ''">$(VCInstallDir)atlmfc\src\mfc;$(VCInstallDir)atlmfc\src\atl;$(VCInstallDir)crt\src;</SourcePath>

複製代碼

綠色粗體部分就是該版本所須要的各類文件的路徑,注意路徑必須以"\"結尾.

$(VSInstallDir) 是從 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\Setup\VS 裏讀取ProductDir的值

$(VCInstallDir) 是從 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\Setup\VC 裏讀取ProductDir的值

$(ExecutablePath) 是根據上面的兩個環境變量去設置,裏面有 $(VSInstallDir)Common7\ide 說明有可能會用到裏面的dll或者exe等可執行文件(實驗中此處是用到了ide裏的mspdb80.dll).

這文件是xml格式的語法沒詳細研究的,但不難看出 <VCInstallDir Condition="'$(VCInstallDir)' == ''">*</VCInstallDir> 這一句應該是$(VCInstallDir)這個環境變量爲空時纔會設置$(VCInstallDir)的值(避免覆蓋已有設置)

這樣就把註冊表里加上咱們須要的路徑就能夠了.不推薦直接修改本文件,不知道爲啥不推薦.....

我把VC6 VC7.1和VC9的平臺工具集打包一下上傳了,還附帶寫了個註冊表腳本能夠視狀況修改導入.

之因此不製做VC7.0和VC8的工具集,1是電腦上沒裝,2是感受這三個版本都比較經典.VC6以快著稱 VC7.1折中 VC8和VC9都差很少的.

對了,VC8(VS2005)和更高版本須要注意time_t類型佔用空間問題,VC8如下的是32位的,VC8和更高版本默認是64位的,能夠定義宏_USE_32BIT_TIME_T來使用32位time_t.

還有,源碼路徑不能有中文,或者最起碼連接器生成exe的路徑不能含有中文.不然會提示找不到文件的錯誤.具體緣由沒找到.

最後放上下載地址

http://115.com/folder/fbgvmmk7#VS2010平臺工具集

因爲115網盤內的文件已經找不到, 如今補上百度雲的連接, 可是百度雲是rar的, 內容應該和當初115網盤的7z同樣:

連接:http://pan.baidu.com/s/1milgsZ2 密碼:m1rx

偷懶的直接下

VCPlatformTools.7z

這個文件,裏面包含了VC6,VC7.1,VC9的文件和註冊表文件還有一份簡易說明

不想下這麼大文件的本身看狀況下.

相關文章
相關標籤/搜索