博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

C++编程设计之路

guanbin.cublog.cn


(转)wxWidgets + Visual C++2005 + PlatformSDK 安装使用手记
wxWidgets 的确是不错的东西啊,这几天看了它的 document 和一些教材,越看越激动哦。
 
wxWidgets 虽然支持大多流行编译器,但若是开发侧重 Windows 平台的应用程序,笔者以为,还是使用 VC 比较合适。为什么呢?大家知道,VC 编译器是很快的(不过有些人觉得 BC 要更快一点),且生成的可执行文件较小。另外,一个最最最重要的优点就是 VC 的调试器实在太好了。易用、稳定,简直无人能及。还有,VC 的 IDE 也是相当不错,尤其是 IntelliSense,也是属于无人能及的那种,而且界面比较漂亮 :P 所以,我选择用 VC 配合 wxWidgets 工作。
 
最强的反对 VC 意见可能会来自 gcc/gdb 的忠实拥护者们,gcc/gdb 的确堪称是 C++ 编译器/调试器的标准。但是,Windows 下的移植版似乎还不怎么另人满意,至少目前还很不满意。首先是慢,MinGW 慢,Cygwin 更慢(且后者还拖着个硕大的 dll)。像我这种比较性急的人总在写完一小段代码后就迫不及待的编译看看,要是以 MinGW 或Cygwin 那种速度恐怕不可能了吧。其次毕竟是移植过来的东西,比起土生土长的 VC 毕竟还是问题多多。还有 IDE,没找到几个支持 MinGW / Cgywin 的像样的 IDE,好一点的可能要算 DevC++ 了吧,还有整合了 wxWidgets 和窗体编辑器的 wxDevC++,SourceForge 都有下载。但还是不能和 VC 的 IDE 相比。最后,有人要说 gcc 是 everything and everywhere,担心 VC 程序的移植性。其实那是完全不用考虑的问题,VC8 对标准 C++ 的支持已近相当不错,只其实要用标准 C++ 写程序,在 VC 下可以编译,在 UNIX/GNU Linux 环境下的 gcc 一样可以编译。如果你真正喜欢 gcc 的话,也可以在开发阶段使用 VC,而在生成最终产品时使用 gcc :D
 
说了这么多,下面是正题,我如何安装和使用 wxWidgets。
 
先是安装 Microsoft Visual C++ 2005 Express 和 Platform SDK。可从微软网站上下载,都是免费的(其中前者有一年的使用期限)。Visual C++ 的安装没什么说的,Platform 若完全安装比较庞大,如果你想节省点空间不妨只选择下面两项进行安装:
 
(1) Microsoft Windows Core SDK\Build Environment\Build Environment (x86 32-bit)
(2) Microsoft Data Access Services (MDAC)\BuildEnvironment\Build Environment (x86 32-bit)
 
选择第二项的目的是因为这一项中包含 odbc32.lib,如果你不需要则可以不选,但本文的后面部分,特别是编译 wxWidgets 时,都是按照选择了这一项来进行的(USE_ODBC=1)。另外,如果你的系统结构是 AMD64 或 IA64 则应该选择相应的 Build Environment。
 
下面开始安装 wxWidgets,在 SourceForge.net 下载了 wxWidgets-2.6.2 的 zip 包。解压到某一目录(后文中此目录用 %WXPATH% 代替)。
 
首先,编译 wxWidgets。在 Visual Studio 命令行环境下进入 %WXPATH%\build\msw 目录。这里面有一系列由 Bakefile 生成的 makefile,根据其对应的编译器不同有着不同的后缀,并且每种编译器也对应着一个 config 文件。因为我们用的是 VC,所以我们关注的是 makefile.vc 和 config.vc。
 
用文本编辑器打开 config.vc 文件。这是关于如何编译 wxWidgets 的设置。这里解释一些重要的选项。
 
SHARE: 编译产生的 wxWidgets 库是静态库还是动态库
UNICODE: 是否支持 unicode utf-8
BUILD: 编译产生的库是用于调试的还是最终发行的
 
UNICODE、BUILD 选项可产生四种组合,产生四套不同的库,若再和 SHARE 组合则可产生八套不同的库。 

MONOLITHIC: 是否只产生一个单一的库文件。
 
USE_GUI: 是否编译图形界面库
USE_HTML: 是否编译 HTML 库
USE_XRC: 是否编译 XRC 库
USE_OPENGL: 是否编译 OPENGL 库
USE_ODBC: 是否编译 ODBC 库
USE_QA: 是否编译 QA 库
 
RUNTIME_LIBS: 使用动态还是静态的 C++ 运行库,对应 VC 编译器的 /MD 和 /MT 参数
 
我一共编译了四套静态库,即用 UNICODE 和 BUILD 两个选项产生的四种组合:
(1) UNICODE = 0  BUILD = debug
(2) UNICODE = 0  BUILD = release
(3) UNICODE = 1  BUILD = debug
(4) UNICODE = 1  BUILD = release
 
除了 UNICODE 和 BUILD 选项之外,其它选项如下:
 
SHARE = 0
MONOLITHIC = 0
USE_GUI = 1
USE_HTML = 1
USE_XRC = 1
USE_OPENGL = 1
USE_ODBC = 1
USE_QA = 1
RUNTIME_LIBS = static
 
按照上面修改了 config.vc 后,分别四次执行
 
nmake -f makefile.vc (稍等一下,要运行好一会儿的)
 
每次执行之前,将 UNICODE 和 BUILD 改为前文中四种组合的其中一种。
 
编译产生的临时文件分别在 msw mswd mswu mswud 四个子目录中,这些是为了在调整设置后重新编译时节约时间的,若不想重新编译可以把它们删掉。而最终产生的 lib 文件已经被拷贝到了 %WXPATH%\lib\vc_lib 下。其中每套库还有一个配置文件,分别在 %WXPATH%\lib\vc_lib 下的 msw mswd mswu mswud 四个目录中,这些配置文件里包含许多可以调整的预编译选项,具体可以参考相关文档。
 
到此为止,wxWidgets 库已经编译好了。那么怎样设置一个使用 wxWidgets 的 Visual Studio 工程呢。启动 Visual C++ 2005 Express,打开 Tools\Option 菜单。这里是 IDE 的一些全局选项。看看 Projects and Solutions\VC++ Directories 里面是否包括 Platform SDK 的 include 和 lib 目录,如果没有的话加上。然后新建一个工程,在工程设置里面修改编译器和连接器的设置如下(注意把 %WXPATH% 换成真实的 wxWidgets 解压目录):
 
[Debug]
 
Configuration Properties\C/C++\General\Additional Include Directories:
%WXPATH%\include;%WXPATH%\include\msvc

Configuration Properties\C/C++\Preprocessor\Preprocessor Definitions:
WIN32;__WXMSW__;_WINDOWS;_DEBUG;__WXDEBUG__

Configuration Properties\C/C++\Code Generation\Runtime Library:
Multi-threaded Debug(/MTd)

Configuration Properties\Linker\General\Additional Library Directories:
%WXPATH%\lib\vc_lib

Configuration Properties\Linker\Input\Additional Dependencies:
kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib odbc32.lib opengl32.lib
(wxWidgets 的库好像会在预编译里自动被加上)

Configuration Properties\Linker\Debugging\Generate Debug Info:
Yes(/DEBUG)
 
[Release]
 
Configuration Properties\C/C++\General\Additional Include Directories:
%WXPATH%\include;%WXPATH%\include\msvc

Configuration Properties\C/C++\Preprocessor\Preprocessor Definitions:
WIN32;__WXMSW__;_WINDOWS

Configuration Properties\C/C++\Code Generation\Runtime Library:
Multi-threaded Debug(/MT)

Configuration Properties\Linker\General\Additional Library Directories:
%WXPATH%\lib\vc_lib

Configuration Properties\Linker\Input\Additional Dependencies:
kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib odbc32.lib opengl32.lib
 
这样,你的工程里应该可以正常编译使用了 wxWidgets 的程序了。
 
如果你想工程里使用 XP 主题外观的话,需要在自己建立一个 .rc 文件,并在其中引用 %WXPATH%\include\wx\msw\wx.rc 文件。如果这样做不行的话可以在 Configuration Properties\Linker\Manifest File\Additional Manifest Dependencies 里手动加上 %WXPATH%\include\wx\msw\wx.manifest,或者在 Additional Include Directories 里加入 %WXPATH%\include\wx\msw (因为 wx.rc 里对 wx.manifest 的引用好像没有加路径)。
 
基本上就是这么多了,这篇文章主要写给初用 wxWidgets 的人看,免得绕弯路。如果有什么问题可以和我联系。也可以上 http://www.solidsteel.nl/users/wxwidgets/ 提问。

 原文地址 http://layesuen.spaces.live.com/blog/cns!BCB0A55D794BEAF6!443.entry
发表于: 2007-03-16 ,修改于: 2007-03-16 23:21,已浏览637次,有评论0条 推荐 投诉


网友评论

发表评论