我们项目开发过程中难免要迁移工程,如对工程重命名,或将一个或多个项目添加到一个解决方案中,如果迁移方法不正确,或设置问题,总会出一些编译问题,对熟悉大侠来说可谓驾轻就熟,但对像我一样的初学者来说就会无从下手了,所以也查阅了相关资料再加上个人亲身实验,谈谈操作的相关步骤及遇到问题的解决办法。
一、重命名解决方案/项目步骤
如将一个AAA项目重命名为BBB,一般是用sln解决方案文件打开工程的,打开后把项目AAA重命名为BBB,改后只是逻辑名改了,其物理名还是AAA.vcproj,修改成BBB.vcproj,用sln打开时会找不到该项目,有两个办法,(1)移除不可用项目,右键解决方案,添加->现有项目,选择BBB.vcproj即可,(2)用记事本直接打开sln,修改里的项目名,路径等,再用VS打开就可以了
二、解决方案中添加多个项目
这个其实很简单了,右键解决方案,添加->现有项目,选择相应的vcproj就可以了,需要重命名再参照上面的
三、修改文件结构所带来预编译头问题及解决办法
上面是以整个项目做为迁移的,操作也很简单,相信有点点动手能力的人,自己早就搞会了,我就是有点画蛇添足了。可是如果要以单个文件迁移,修改文件的结构,特别是修改预编译文件(一般是stdafx.h和stdafx.cpp),就会出现预编译错误,一般为如下三个:
1、“fatal error C1083: 无法打开预编译头文件:“Debug/DSMS.pch”: No such file or directory”
2、error C2859: ..../vc80.pdb 不是创建此预编译头时使用的 pdb 文件,请重新创建预编译头。
error C2859: ...../vc80.idb 不是创建此预编译头时使用的 idb 文件,请重新创建预编译头。
3、error LNK2001: 无法解析的外部符号 "int __cdecl _AfxInitManaged(void)" (?_AfxInitManaged@@YAHXZ)
先来说一说解决办法,这三个错误可以用一个办法解决,右键你项目的预编译文件(stdafx.cpp)――>属性――>配置属性――>C/C++――>预编译头――>创建/使用预编译头选择创建预编译头->重新生成,解决。在选stdafx.cpp属性时,其实每一个文件都有自己的属性的,整个项目有属性(菜单->项目->属性),来管理所有文件,这个我也是后来才知道的(不要笑我啦),其它CPP都是“使用预编译头”,新添加的文件,项目默认设置成“使用预编译头”,所以当修改文件结构时,手动添加stdafx.cpp时就会出现上面的错误。
下面我们来人为的制造这三个错误,借此来说明原因。
新建一个MFC项目,修改stdafx.cpp为“使用预编译头”,删掉项目的Debug文件夹,生成就会出现第一个错误。
新建一个MFC项目,生成,修改stdafx.cpp为“使用预编译头”,用菜单中的“清理项目”清理,重新生成就会出现第两个错误。
新建一个MFC项目,生成,修改stdafx.cpp为“使用预编译头”,重新生成就会出现第三个错误。
原因其实已经很明显了,只说说第三个错误,是一个链接错误mfcs80ud.lib(stdafx.obj) : error LNK2001,我猜想是当stdafx.cpp为“创建预编译头”时就obj不会再去链接_AfxInitManaged(void)了,关于_AfxInitManaged(void)是什么也不得而知了,请高手赐教。
四、VS2005空项目变MFC项目步骤
1、项目->属性->配置属性->常规->MFC的使用中改成“在共享 DLL 中使用 MFC”
2、项目->属性->配置属性->常规->字符集中改成“使用 Unicode 字符集”
3、项目->属性->配置属性->链接器->高级->入口点填写“wWinMainCRTStartup”
以上设置MFC程序可以成功编译,不知道还有没其它设置,如果通过空项目改成的,程序不能调试,还要设置相关选项生成调试信息。
VS2005调试时出现无法找到调试信息解决方案
首先打开菜单项目->项目属性页
1。选择配置属性->链接器->调试->生成调试信息改为 是
2。选择配置属性->C/C++ ->常规->调试信息格式 改为用于“编辑并继续”的程序数据库(/ZI)
3。选择配置属性->C/C++ ->优化->优化改为 自定义
重新编译,运行。