通过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\VC@ProductDir)</VCInstallDir>
<VCInstallDir Condition="'$(VCInstallDir)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\7.1\Setup\VC@ProductDir)</VCInstallDir>
<VCInstallDir Condition="'$(VCInstallDir)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VCExpress\7.1\Setup\VC@ProductDir)</VCInstallDir>
<VCInstallDir Condition="'$(VCInstallDir)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VCExpress\7.1\Setup\VC@ProductDir)</VCInstallDir>
<VSInstallDir>$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\Setup\VS@ProductDir)</VSInstallDir>
<VSInstallDir Condition="'$(VSInstallDir)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\7.1\Setup\VS@ProductDir)</VSInstallDir>
<VSInstallDir Condition="'$(VSInstallDir)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VCExpress\7.1\Setup\VS@ProductDir)</VSInstallDir>
<VSInstallDir Condition="'$(VSInstallDir)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VCExpress\7.1\Setup\VS@ProductDir)</VSInstallDir>
<WindowsSdkDir Condition="'$(WindowsSdkDir)' == ''">$(VCInstallDir)PlatformSDK\</WindowsSdkDir>
<FrameworkDir Condition="'$(UseEnv)' != 'true'">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework@InstallRoot)</FrameworkDir>
<FrameworkDir Condition="'$(FrameworkDir)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework@InstallRoot)</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的文件和注册表文件还有一份简易说明
不想下这么大文件的自己看情况下.
通过Daffodil for VS使VS2010的IDE可以用VC6 VC7.1 VC9等编译器进行项目编译的更多相关文章
- 【转】VC++10(VS2010)IDE各种使用技巧
原文网址:http://www.cnblogs.com/sunrisezhang/articles/2802397.html 一个好的coder,他首先必须是一个熟练工.对于C++程序员来说,只有掌握 ...
- VS2010下WPF开发ARCGIS ENGINE 10的带Ribbon控件项目
原文 http://blog.sina.com.cn/s/blog_47522f7f0100nq5t.html 题目好长,但是集目前最新的工具于一身..VS是最新的2010版,不过用的是.net3.5 ...
- vs2010 项目编译 ResGen.exe”已退出,代码为 -1073741701
解决的办法如下: 1.关闭所有Visual Studio: 2.以管理员的身份打开命令提示窗口:(开始-运行-cmd) 3.更改目录至"CD C:\Program Files (x86)\M ...
- Visual Studio IDE环境下利用模板创建和手动配置CUDA项目教程
目前版本的cuda是很方便的,它的一个安装里面包括了Toolkit`SDK`document`Nsight等等,而不用你自己去挨个安装,这样也避免了版本的不同步问题. 1 cuda5.5的下载地址,官 ...
- Python之IDE工具下载安装及注册详解及创建项目
这篇文章很适合刚接触python语言的或者没有语言基础的同学参考: 目录: 一.IDE工具下载安装 二.IDE注册方法 三.使用IDE 开发工具使用创建项目 一.下载并安装, IntelliJ IDE ...
- vs2010 未能正确加载方案中的一个或多个项目
Visual studio在打开解决方案时,往往会碰到一个这样的错误,提示说:未能正确加载方案中的一个或多个项目: 我们可以通过以下步骤来解决该问题:首先,在相应的sln类型文件上点击右键,选择用记事 ...
- vs2010环境下将Win32控制台应用程序,改为Win32项目
进入工程属性后,一次进入下面选项做相应修改 连接器 ---> 系统 --->子系统: 控制台 (/SUBSYSTEM:CONSOLE)改为:窗口 (/SUBSYSTEM:WINDOWS)
- Golang/Go语言/Go IDE/Go windows环境搭建/Go自动提示编译器/GoSublime
Go是Google开发的一种编译型,并发型,并具有垃圾回收功能的编程语言. 罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pike)及肯·汤普逊于2007年9月开始设计Go ...
- Atitit.ide eclipse编译速度慢的解决
Atitit.ide eclipse编译速度慢的解决 以为是jar的体积与数量,貌似无关.. Err java的数量,貌似无关 Java的数量,关系不大... 最终原因:show>>pro ...
随机推荐
- jQuery $.each用法[转]
jQuery $.each用法 以下内容非原创,来自百度文库http://wenku.baidu.com/view/4796b6145f0e7cd18425368e.html 通过它,你可以遍历对象. ...
- Adobe Audition音频制作
Adobe Audition 同义词 AU(软件(Adobe Audition))一般指Adobe Audition Adobe Audition是一个专业音频编辑和混合环境,原名为Cool Edit ...
- How to connect to Linux VM from Windows
- Init
alloc负责分配对象空间,init负责初始化对象.init是实例方法,返回的是初始化后的对象的地址.init是NSObject的初始化方法. 子类不实现init,会执行由NSObject定义的ini ...
- Eclipse的FindBugs插件
Eclipse的FindBugs插件 问题提出: 当我们编写完代码,做完单元测试等各种测试后就提交正式运行,只能由运行的系统来检测我们代码是否有问题了,代码中隐藏的错误在系统运行的过程中被 ...
- H - Lazier Salesgirl
Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Submit Status Practic ...
- 关于 Record & TList 的一点吐槽
需求是把record 保存在TList中,并可以随时改变TList中Items的各项值. 代码很简单: MyRec = record MyStr: string; constructor Create ...
- 廖雪峰Python教程疑问
1. 字符串的strip()方法 原文: “把一个序列中的空字符串删掉,可以这么写: def not_empty(s): return s and s.strip() list(filter(not_ ...
- 声明提前js变量
声明提前问题相关 js的变量声明语句无论出现在何处,都会先与其他代码首先被执行,使用var声明关键词声明变量的 作用于是当前的执行上下文,有可能是外围函数,或者,当变量声明在函数体之外时,则为全局变量 ...
- Equls 和==的区别
对于值类型,如果对象的值相等,则相等运算符 (==) 返回 true,否则返回 false.对于string 以外的引用类型,如果两个对象引用同一个对象,则 == 返回 true.对于 string ...