找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 6651|回复: 6

一套代码在VC与GCC公用的一个小技巧

[复制链接]
发表于 2009-11-13 14:35:55 | 显示全部楼层 |阅读模式
前一段搞了一个项目,Server需要跨平台,client使用MFC。
client为了不牺牲编译速度,打开的预编译头选项,确实速度相差好多。
这样在两个工程引用公共的代码的代码的时候会比较麻烦。

和开始wishel 的之前的帖子提到的一样,通过一些宏开关进行控制,同样会出现#endif的问题。
后来解决的办法是,为需要跨平台的Server工程目录建立一个空的stdafx.h文件,并在工程中引用这个空的stdafx.h文件,
这样Server编译公用的文件的时候,会引用到自己目录下这个空的stdafx.h,编译可以顺利通过。
Client编译的时候使用的是自己目录下正常的预编译头文件stdafx.h也没有问题。

最近又遇到了另外的一个问题,即有一些公共文件是通过工具生成的,比如winston之前提过的Protobuf,
不支持将文件编译成MFC支持的开关,这样每次重新生产新的文件的时候,
都需要向新生成的cpp文件中手工添加#include "stdafx.h",这显然比较繁琐。

于是再多次尝试之后,得出一个更为简单的解决办法,假设需要生成的文件分别为generated.h,generated.cpp。
在Client工程去掉generated.cpp,新增文件Wapper.cpp,里面的增加两行代码。
#include "stdafx.h"
#include "generated.cpp"
Server工程不用做任何改变。
这样每次新生成文件的时候,不用做任何修改就client与Server与均可以可以直接编译通过了。
发表于 2009-11-15 18:28:09 | 显示全部楼层
我在linux下习惯用Eclipse。modern有没有遇到这样的问题,linux下编码是utf8,所以程序中的中文注释在vc里显示乱码。或者反之也一样,vc的ucs2到了linux也显示不出。有好的解决办法么?
 楼主| 发表于 2009-11-17 10:32:18 | 显示全部楼层
我们现在的项目主要开发工作都是在windows下进行,linux一般就是移植。
因此强制将windows下的文件转成UTF8编码,貌似linux就可以看中文注释了。
发表于 2009-11-19 16:57:43 | 显示全部楼层
哈哈。我现在在锻炼纯英文注释。
发表于 2009-11-19 23:43:58 | 显示全部楼层

vs2005开始使用utf8编码编辑及保存文件了。

vs2005开始使用utf8编码编辑及保存文件了。

工具-> 选项-> 文本编辑器-> 自动检测不带签名UTF-8编码

[ 本帖最后由 shenming 于 2009-11-20 00:00 编辑 ]
发表于 2009-11-20 12:04:17 | 显示全部楼层
原帖由 shenming 于 2009-11-19 23:43 发表
vs2005开始使用utf8编码编辑及保存文件了。

工具-> 选项-> 文本编辑器-> 自动检测不带签名UTF-8编码

太好了,哈哈。谢谢:handshake
发表于 2010-1-31 19:28:08 | 显示全部楼层
在 VS 里面,可以对单个文件选择不使用预编译头,不用对这个文件加包装代码。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-22 17:03 , Processed in 0.017996 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表