通过Daffodil for VS使VS2010的IDE可以用VC6 VC7.1 VC9等编译器进行项目编译

本文内容中的部分资料和知识来源于网络,具体引用出处不明.

VS的IDE从VC6到VS2010的变化可谓是天翻地覆,最新的VS2010有一个特性就是支持多显示器开发,这无疑为我们的开发带来很大的便利.

VC的各种版本也都有它自己的特点,像VC6就以速度快著称.

随着操作系统的不断进化,即使是开发人员对新系统的华丽界面也有所动心.我就是 哈哈.

Win7正式发布以来 一直没太关注,因为之前尝试过Vista,被各种挫折打败了.去年开始才算正式踏上了使用Win7的路程

结果 Win7还是挺好用的.不知道Win8正式版发布以后会不会更好用.

系统更新换代对应的软件和各种工具当然最好是跟上脚步,这样才算完美.

手里有一份游戏代码挺大的,不过是VC7.1的工程,一直想以各种手段转换为VS2008甚至VS2010的,均已各种莫名其妙的bug乱弹告终.

可带着多台显示器做开发,没有发挥最大用处感觉太浪费了.

上段时间又把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为例

<PlatformToolsetVersion>71</PlatformToolsetVersion>
    <VCInstallDir>$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\Setup\[email protected])</VCInstallDir>
    <VCInstallDir Condition="‘$(VCInstallDir)‘ == ‘‘">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\7.1\Setup\[email protected])</VCInstallDir>
    <VCInstallDir Condition="‘$(VCInstallDir)‘ == ‘‘">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VCExpress\7.1\Setup\[email protected])</VCInstallDir>
    <VCInstallDir Condition="‘$(VCInstallDir)‘ == ‘‘">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VCExpress\7.1\Setup\[email protected]ir)</VCInstallDir>
    <VSInstallDir>$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\Setup\[email protected])</VSInstallDir>
    <VSInstallDir Condition="‘$(VSInstallDir)‘ == ‘‘">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\7.1\Setup\[email protected])</VSInstallDir>
    <VSInstallDir Condition="‘$(VSInstallDir)‘ == ‘‘">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VCExpress\7.1\Setup\[email protected])</VSInstallDir>
    <VSInstallDir Condition="‘$(VSInstallDir)‘ == ‘‘">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VCExpress\7.1\Setup\[email protected])</VSInstallDir>
    <WindowsSdkDir Condition="‘$(WindowsSdkDir)‘ == ‘‘">$(VCInstallDir)PlatformSDK\</WindowsSdkDir>
    <FrameworkDir Condition="‘$(UseEnv)‘ != ‘true‘">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\[email protected])</FrameworkDir>
    <FrameworkDir Condition="‘$(FrameworkDir)‘ == ‘‘">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\[email protected])</FrameworkDir>
    <FrameworkSdkDir Condition="‘$(UseEnv)‘ != ‘true‘">$(VSInstallDir)SDK\v1.1\</FrameworkSdkDir>
    <FrameworkVersion Condition="‘$(UseEnv)‘ != ‘true‘">v1.1.4322.573</FrameworkVersion>
    <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>
    <IncludePath Condition="‘$(IncludePath)‘ == ‘‘">$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(VCInstallDir)PlatformSDK\include;$(VCInstallDir)PlatformSDK\common\include;$(FrameworkSDKDir)include;</IncludePath>
    <ReferencePath Condition="‘$(ReferencePath)‘ == ‘‘">$(FrameworkDir)$(FrameworkVersion);$(VCInstallDir)atlmfc\lib;</ReferencePath>
    <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>
    <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平台工具集

偷懒的直接下

VCPlatformTools.7z

这个文件,里面包含了VC6,VC7.1,VC9的文件和注册表文件还有一份简易说明

不想下这么大文件的自己看情况下.

时间: 2024-10-10 07:03:49

通过Daffodil for VS使VS2010的IDE可以用VC6 VC7.1 VC9等编译器进行项目编译的相关文章

windows7 64位操作系统上使vs2010和vs2013能够并存的处理方法

之前机子上是只安装有vs2010,后来在没有卸载vs2010的情况下想装个vs2013,使vs2010与vs2013同时并存在windows764位机上.需要依次安装cn_visual_studio_ultimate_2013_x86_dvd_3009109.iso.vs2013.2.iso和vc_mbcsmfc.exe.在安装过程中遇到的问题有: (1).在用DAEMON Tools Lite工具装载cn_visual_studio_ultimate_2013_x86_dvd_3009109.

Golang/Go语言/Go IDE/Go windows环境搭建/Go自动提示编译器/GoSublime

Go是Google开发的一种编译型,并发型,并具有垃圾回收功能的编程语言. 罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pike)及肯·汤普逊于2007年9月开始设计Go语言,Go语言是基于Inferno操作系统所开发的.Go语言于2009年11月正式宣布推出,并在Linux及Mac OS X平台上进行了实现. GO语言吉祥物,很可爱吧. Go语言的hello world!代码: [java] view plaincopyprint? package main im

Atitit.ide eclipse编译速度慢的解决

以为是jar的体积与数量,貌似无关.. Err java的数量,貌似无关 Java的数量,关系不大... 最终原因:show>>prob view的问题..只要把他clr掉..就ok了... Ide的功能 项目管理 源码编辑 代码导航 Search 项目编译,运行,调试 各种面板设置.. 插件体系 源码管理,(svn,git) 代码文档 作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL

[转]Delphi预编译指令总结

Delphi预编译指令总结 Delphi作为一个优秀的开发工具,这不仅是由于它开创了"构件 (Component)"时代,影响深远:另一个原因是它拥有非常出色的编译器,Borland(Inprise)公司宣称Delphi具有世界上最快的 编译器,如果你使用过Visual C++和Delphi你会明显体会到这一点.Delphi快速高效的编译器主要来自Object Pascal的严谨,使用Delphi随时都在和编译器交流,大部份情况下不需要我们干涉编译器的运行,但是有时也需要对编译器进行必

maven环境搭建以及手动创建maven工程

今天开始学习maven,maven是一个项目管理和构建的工具,使用起来非常方便,有了maven我们可以很方便的将项目编译,打包运行等,Maven能够很方便的帮我们管理项目报告,生成站点,管理JAR文件,等等. maven下载 首先需要到maven的官网下载maven: http://maven.apache.org/download.cgi# 这里我下载到E:\maven\apache-maven-3.3.3目录 环境变量配置 下载完成之后,需要配置环境变量,将maven项目根目录下的bin目录

Delphi中预编译指令

本文转自 http://www.cnblogs.com/JackSun/archive/2010/12/20/1911250.html <Delphi下深入Windows核心编程>(附录A Delphi编译指令说明) Delphi快速高小的编译器主要来自Object PASCAL的严谨,使用Delphi随时都在与编译器交流,大部分情况下不需要干涉编译器的运行,但是有 时也需要对编译器进行必要的设置. ***********************************************

编写第一个Qt程序

http://c.biancheng.net/view/1817.html 学习一种编程语言或编程环境,通常会先编写一个“Hello World”程序.我们也用 Qt Creator 编写一个“Hello World”程序,以初步了解 Qt Creator 设计应用程序的基本过程,对使用 Qt Creator 编写 Qt C++ 应用程序建立初步的了解. 新建一个项目 单击 Qt Creator 的菜单项文件->新建文件或项目,出现如图 1 所示的对话框.在这个对话框里选择需要创建的项目或文件的

vc6.0 PK vs2010

从VC++6.0不足看VisualC++2010新特性 说起VC,有人想到维生素C(维C),有人想到风险投资(venture capital), 程序员们尤其是做底层开发的程序员或老程序员们第一感觉肯定会想到Visual C++6.0.为什么是6.0而不是其它的版本?这里的原因就不用我再多讲了,因为太经典了!这个经典已经有了10年的光荣历史,微软的Visual Studio系列也已经发展到了Visual Studio 2010.漫长的辉煌中Visual C++6.0也暴露出了一些问题,在这篇文章

VS2010 C++环境下DLL和LIB文件目录及名称修改

DLL工程,Debug版本下输出文件由basetool.dll basetool.lib 改为basetoolD.dll basetoold.lib 需设置: 1.配置属性-常规-目标文件名 $(ProjectName) 加d 2.配置属性-连接器-常规-输出问件 由 加d 3.配置属性-连接器-高级-导入库,设置文件名$(OutDir)$ProjectName)d.lib 4.如果有导出文件,.def文件中也一定要修改导出库的名字 LIBRARY      "BaseTool" 变为