一套代码,同时在vc2005和gcc中使用的方法
前几天把自己的gcc程序转到vc2005下编译,总结一下经验。有几个需要考虑的问题
1,vc中要求所有cpp文件都必须#include "stdafx.h",且放在首行。当然可以disabled这个选项,但是为了编译速度,最好保留预编译头功能。
刚开始的想法是在cpp文件头部加入
#if defined (_MSC_VER)
#include "stdafx.h"
#endif
但很可惜不行,vc中会在#endif处报错。
2,vc中对dll的处理很特别,必需分别用__declspec(dllexport)和__declspec(dllimport)声明导出和导入的符号。
现在的想法是一套程序,可以不用修改在vc2005和gcc中都能顺利编译。具体做法是:
1,在需要生成dll的工程的stdafx.h中:
#if defined (_MSC_VER)
#define MY_LIB __declspec(dllexport)
// vc 的原有stdafx.h中的东西
#else
#define MY_LIB
#endif /* _MSC_VER */
2,在该工程的所有public class前加上MY_LIB声明,如
class MY_LIB A
{
// .....
}
3,在需要用到上面dll的工程的stdafx.h中:
#if defined (_MSC_VER)
#define MY_LIB __declspec(dllimport)
// vc 的原有stdafx.h中的东西
#else
#define MY_LIB
#endif /* _MSC_VER */
[ 本帖最后由 wishel 于 2008-9-5 16:50 编辑 ] ACE程序员指南2.5.1介绍了用$ACE_ROOT/bin/generate_export_file.pl 来做类似的事情的方法,看起来比较累,功能也比较多。
上面这种方法比较简单易懂,功能上也基本够用了,可以作为另一种选择吧,呵呵。 你这个也只是某些方面,还有其他情况呢。。。:lol 慢慢来撒,我也是刚开始学用vc,遇到新情况就再总结增加吧
页:
[1]