VC 6.0 下搭建 wxWidgets 开发环境
和 GTK
、
QT
、
SWT
、
SWING
一样,
wxWidgets
也是一种开源跨平台的
GUI
框架。因
wxWidgets
和
MFC
有些渊源,有些亲近,故要体验一番
wxWidgets
。现在最新版是
2.8.7
。
wxWidgets
程序还可运行于
Windows CE
、
Palm OS
。不但包括
GUI
,还有
Media
、
Socket
、
ODBC
等库。
详情请见 wxWidgets
的官方网站是:
http://www.wxwidgets.org
本篇介绍 VC++6.0
下如何搭建
wxWidgets
的开发环境,包括编译
wxWidgets
源码和配置
VC
环境。所用
wxWidgets
的版本是
2.8.7
。
第一步:下载并安装 wxWidgets
在 http://www.wxwidgets.org/downloads/
下载到
wxWidgets
源码。
你可以下载 Windows
安装版
http://prdownloads.sourceforge.net/wxwindows/wxMSW-2.8.7-Setup.exe (11.9M)
或者是 Zip
压缩版
http://prdownloads.sourceforge.net/wxwindows/wxMSW-2.8.7.zip (15.9M)
假如我们下载的是 wxMSW-2.8.7-Setup.exe
,就可运行它,过程中我们假定选择的安装目录是
d:/wxWidgets-2.8.7
。 完成后,我们看到安装目录所在空间的大不是
127M
。
注意要给 wxWidgets
有足够的剩余空间,单是编译一个版本的静态库就会增至
300
多
M
,如果还要编译动态库再选择上
DEBUG
或者
RELEASE
、
ASCII
或是
UNICODE
等,还要编译
sample
的话,最后空间能够暴到
2G
。
第二步:编译 wxWidgets
编译方式有两种,一种是在 VC++
中打开
wx.dsw
进行编译,另一种是用
nmake
在命令行下编译。
1) nmake 编译
运行 cmd.exe
来到命令行下,进入到目录
d:/wxWidgets-2.8.7
,然后执行
D:/wxWidgets-2.8.7>nmake -f makefile.vc
默认是编译成 DEBUG
版的静态库。也许我们在编译之前需要根据自己的需要进行一些设置:
打开 D:/wxWidgets-2.8.7/include/wx/msw/setup.h
保证第 110
行的
#define wxUSE_DEBUG_NEW_ALWAYS
设置为
0
。默认是
0
的。
将 1137
行的
#define wxUSE_IOSTREAMH
设置为
0
,否则无法使用
VC
的模板库
(
不能用
std
命名空间下的
)
。默认是
1
。
如果要使用 wxWidgets
提供支持数据库的
ODBC
类,将
#define wxUSE_ODBC
设为
1
。默认是
1
。
如果你想生成动态库,或生成的是 Release
版的,你可以修改
D:/wxWidgets-2.8.7/build/msw/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
其中还有许多顾名思义的选项,请根据需求修改。
对于 config.vc
中的选项也可以通过命令行覆盖掉配置文件中的值,如编译命令用
D:/wxWidgets-2.8.7>nmake -f makefile.vc SHARED=1 UNICODE=1 BUILD=release
就是编译 release
版,支持
UNICODE
的动态库了。
动态库和静态库的不同体现在使用上,静态库中的代码能编译进应用程序的 exe
文件中,这个
exe
文件可单独发布,但体积较庞大。动态库可让
exe
文件执行时加载,虽然
exe
文件体积小了,但发布时必须带着相应的动态库文件。
2) VC 编译
还 可用 VC++
打开
D:/wxWidgets-2.8.7/build/msw/wx.dsw
,然后选择
Build->Batch Build...
,我们看到每个工程都有
16
个配置,请根据应用需求勾选你的配置,如所有工程的
Win32 Release
和
Win32 Debug
版本,然后
Build
,如果你照单全收,编译将非常耗时而占空间。这种编译方式就是可以一下操作帮你编译出所有需要的版本。
好, 等等编译完之后,在目录 D:/wxWidgets-2.8.7/lib/
会有产生一个目录:
vc_lib
是静态库的目录,默认编译有
17
个静态。如果是编译成动态库则会产生目录
vc_dll
。在
vc_lib
中有
mswd
目录,
release
版对应的是
msw
,里面含有
Debug
和
Release
版的
setup.h
。
注意到 Debug
版和
Release
以及和
UNICODE
、动态库、静态库组合条件编译生成的文件和目录名。
静态库编译到 D:/wxWidgets-2.8.7/lib/vc_lib
目录中
动态库编译到 D:/wxWidgets-2.8.7/lib/vc_dll
目录中
文件命名为 wxmsw28d_core.lib
文件为例:
wxmsw28_core.lib ---- Release,非
UNICODE
版
wxmsw28d_core.lib ---- Debug,非
UNICODE
版
wxmsw28u_core.lib ---- Release,
UNICODE
版
wxmsw28ud_core.lib ---- Debug,
UNICODE
版
对于 dll
文件的命名规范也一样的。
在 vc_lib
和
vc_dll
下如果全编译了会有四个目录,
msw
、
mswd
、
mswu
、
mswud
意义同上。
编译完后可以把那些过程中的目标文件删了,它们占的空间实在是太大。要是你还想以后重新编译用就留着吧。
第三步:创建 wxWidgets
项目
创建一个 Win32 Application
的空项目,项目名为
wxHello
Proejct->Settings (Alt+F7) 进入项目设置
1. C/C++选项卡
->Code Generation -> use run-time library
设置为
: Debug MutilThread DLL
2. C/C++选项卡
-> PreProcessor -> PreProcessor Definitions
设置加上
__WXMSW__,__WXDEBUG__ ,
如果是
Release
版
,
则只需加上
__WXMSW__
。
3. C/C++选项卡
-> PreProcessor -> Additional include directories
设置为
D:/wxWidgets-2.8.7/include,D:/wxWidgets-2.8.7/include/lib/vc_lib/mswd,
这是设置附加
Include
路径。
4. Link 选项卡
-> Input -> Object/library modules
设置加上
wxmsw28d_core.lib wxbase28d.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexd.lib wxexpatd.lib
这些
Lib(
没有这四个
lib comctl32.lib rpcrt4.lib winmm.lib wsock32.lib
的话请加上,关键是前两个
)
。如果要使用
wxODBC
就加上
wxbase28d_odbc.lib
。
5. Link 选项卡
-> Input -> Addtional library path
设置为
: D:/wxWidgets-2.8.7/lib/vc_lib
。
注意:编译成不同版的执行代码应填入相应的 Additional include directories
和
Addtional library path
。
编译成依赖 DLL
的执行文件还需要加上预处理指令
WXUSINGDLL
用UNICODE
编译则需要加上预处理指令
_UNICODE
还有一种 Universal
编译,要加上预处理指令
__WXUNIVERSAL__
这样一个普通的WxWdigets
项目就设置好了
.
我们测试 WxWidgets
自带的例子
minimal
。新建一个
minimal.cpp
文件,内容同
D:/wxWidgets-2.8.7/samples/minimal/minimal.cpp
,编译,不出意外,成功了
!
也可设置全局的目录
前 面我们是为项目配置 Additional Include Directories
和
Additional library path
。我们可以把这设置成全局的。就可以不用在项目中单独设置。全局设置有其缺陷,无法分开是
vc_lib
还是
vc_dll
中的
lib
,是
mswd
还是
msw
中的
wx/setup.h
文件。在这里设置
Source Files
还是必要的。并且在下面前两个
Include Files
放在全局设置里也较合适。
进到 VC++
的
Tools->Options->Directories
,选择
"Include Files"
后,添加
D:/wxWidgets-2.8.7/include
D:/wxWidgets-2.8.7/contrib/include
D:/wxWidgets-2.8.7/lib/vc_lib/mswd
对应于 Project Settings -> C/C++ Tab->Preprocessor
中的
Additional include directories
再选择 "Libraries Files"
,添加
D:/wxWidgets-2.8.7/vc_lib
对应于 Project Settings -> Link Tab -> Input
中的
Additional library path
再选择 "Source Files"
,添加
D:/wxWidgets-2.8.7/src
最后大致比较一下生成程序的大小
Release 静态库版
(vc_msw) minimal.exe 1.11M
,可单独发布
Debug 静态库版
(vc_mswd) minimal.exe 2.52M
,可单独发布
Release 动态库版
(vc_mswdll) minimal.exe 68K
,加上
wxmsw28_core_vc_custom.dll (2.85M)
和
wxbase28_vc_custom.dll (1.11M)
,共
4M
Debug 动态库版
(vc_mswddll) minimal.exe 96K
,加上
wxmsw28d_core_vc_custom.dll (4.26M)
和
wxbase28d_vc_custom.dll (1.82M)
,共
6.1M
这是一个简单的 wxWidgets
程序,只用到了两个动态库的情况。在用到
wxWidgets
库较少时用静态库来编译发布文件会小一些,若是用到组件多的时候,可能用动态库方便些,请酌情决定。
本文转载自优快云 http://sd.youkuaiyun.com/page/8af6ed1e-b6b4-4ef9-8bc2-6f5485c79c34