`
arust
  • 浏览: 94056 次
  • 性别: Icon_minigender_1
  • 来自: 海底
社区版块
存档分类
最新评论

Visual C++ 2008 Express Edition 环境下使用 wxWidgets

阅读更多
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 项目就设置好了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics