设为首页 收藏本站
查看: 563|回复: 0

[经验分享] Visual C++ 2008 Express Edition 环境下使用 wxWidgets

[复制链接]

尚未签到

发表于 2016-5-23 01:46:07 | 显示全部楼层 |阅读模式
wxWidgets 是一个开源的跨平台 GUI 框架,使用起来和 MFC 有些类似。目前的最新版是 2.8.9。wxWidgets 可以和 Microsoft Visual C++ 2008 Express Edition 很好地结合在一起使用。

第一步:获得源代码

从 wxWidgets 官方网站可以下载得到源代码压缩包,解压以后的文件夹当中有编译时需要的源代码,编译配置等文件。有了这些就可以开始编译源代码了。

第二步:编译之前的设置

假设 wxWidgets 解压后的目录为 %WXPATH%,编译时的一些选项可以在 %WXPATH%\include\wx\msw\setup.h 中进行修改,各项的作用在代码注释中有说明,比如:
引用
#define wxUSE_DEBUG_CONTEXT 1
#define wxUSE_MEMORY_TRACING 1
#define wxUSE_GLOBAL_MEMORY_OPERATORS 1
#define wxUSE_DEBUG_NEW_ALWAYS 1

这样可以打开 wxWidgets 内建的内存泄露检测功能,对各项设置不了解的话就保持默认吧。wxWidgets 在 %WXPATH%\build\msw 下提供了针对各种编译器的配置文件,对应 VC 的配置文件是 config.vc。下面是其中的一些比较重要的选项:

# What type of library to build? [0,1] -- 生成库的类型,0为静态库,1为动态库
SHARED = 0

# Compile Unicode build of wxWidgets? [0,1] -- 是否编译为 UNICODE 版本,0 否,1 是
UNICODE = 0

# Type of compiled binaries [debug,release] -- 是 debug 还是 release
BUILD = debug

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 选项可产生四种组合,产生四套不同的库,若再和 SHARE 组合则可产生八套不同的库。 我只编译了两套静态库,由于SHARED = 0,还需要把 RUNTIME_LIBS = static,其他选项保持默认:
(1) UNICODE = 1  BUILD = debug
(2) UNICODE = 1  BUILD = release

对于 config.vc 中的选项也可以通过命令行覆盖掉配置文件中的值,如编译命令用
nmake -f makefile.vc SHARED=1 UNICODE=1 BUILD=release

第三步:使用 VC 编译 wxWidgets

打开 Visual Studio 2008 Command Prompt,进入配置文件所在的目录,执行命令:
nmake -f makefile.vc

在目录 %WXPATH%\lib\ 会产生一个目录:vc_lib 是静态库的目录。如果是编译成动态库则会产生目录 vc_dll。
wxWidgets 会根据 Debug 和 Release 以及 UNICODE 、动态库、静态库等条件编译,组合生成文件和目录名。

编译完后可以把 %WXPATH%\build\msw 删了,想重新编译的话可以保留。

第四步:VC 中使用 wxWidgets

在 VC 里新建一个 Win32 Project, 然后在 Application Settings 选项中,将 Additional options 下面的 Empty project 选中,这样项目建立好之后,VC 不会添加任何源代码文件,需要手动新增相应的 cpp 文件后才能继续下面的设置。

引用
Configuration Properties\C/C++\General\Additional Include Directories:
%WXPATH%\include;%WXPATH%\include\msvc


引用
Configuration Properties\C/C++\Preprocessor\Preprocessor Definitions:
WIN32;NDEBUG;_WINDOWS;__WXMSW__
如果是[Debug]就还要加上__WXDEBUG__,变成:
引用
WIN32;_DEBUG;_WINDOWS;__WXMSW__;__WXDEBUG__


引用
Configuration Properties\C/C++\Code Generation\Runtime Library:
Multi-threaded (/MT)
如果是[Debug]就设置成
引用
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

这些静态链接库都是一些可能会使用到的 Windows 系统的库,根据需要增减,比如我从来不用odbc,就不需要在这里添加 odbc32.lib。而 wxWidgets 的静态库会自动添加到工程中,不需要在这里设置,在 %WXPATH%\include\msvc\wx\setup.h 文件中可以看到加载这些库的代码。

编译成依赖 DLL 的执行文件还需要加上预处理指令 WXUSINGDLL
用 UNICODE 编译则需要加上预处理指令 _UNICODE
还有一种 Universal 编译,要加上预处理指令 __WXUNIVERSAL__

这样一个普通的 wxWdigets 项目就设置好了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-220393-1-1.html 上篇帖子: 2008年那场风花雪月的技术 下篇帖子: 看IT技术概览图 了解2008年技术热点
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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