modern 发表于 2009-11-13 14:35:55

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

前一段搞了一个项目,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与均可以可以直接编译通过了。

wishel 发表于 2009-11-15 18:28:09

我在linux下习惯用Eclipse。modern有没有遇到这样的问题,linux下编码是utf8,所以程序中的中文注释在vc里显示乱码。或者反之也一样,vc的ucs2到了linux也显示不出。有好的解决办法么?

modern 发表于 2009-11-17 10:32:18

我们现在的项目主要开发工作都是在windows下进行,linux一般就是移植。
因此强制将windows下的文件转成UTF8编码,貌似linux就可以看中文注释了。

wishel 发表于 2009-11-19 16:57:43

哈哈。我现在在锻炼纯英文注释。

shenming 发表于 2009-11-19 23:43:58

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

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

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

[ 本帖最后由 shenming 于 2009-11-20 00:00 编辑 ]

wishel 发表于 2009-11-20 12:04:17

原帖由 shenming 于 2009-11-19 23:43 发表 http://www.acejoy.com/bbs/images/common/back.gif
vs2005开始使用utf8编码编辑及保存文件了。

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

太好了,哈哈。谢谢:handshake

netelf 发表于 2010-1-31 19:28:08

在 VS 里面,可以对单个文件选择不使用预编译头,不用对这个文件加包装代码。
页: [1]
查看完整版本: 一套代码在VC与GCC公用的一个小技巧