wxWidget的编译

参考:http://blog.csdn.net/hjy82919/article/details/3400734

Windows下的编译和安装

用MS编译

直接用MS打开编译,这个就不详细说明了

用MS控制台编译

        打开Visual Studio.net命令提示窗口,进入到"wxWidget-2.8.8/build/msw"目录下:

                                “nmake -f makefile.vc  BUILD=debug UNICODE=0 SHARED=0”

                                 其中的BUILD,UNICODE, SHARED为编译选项,可以根据需要设置它们的值。

   

用Mingw编译

“mingw32-make -f makefile.gcc BUILD=debug UNICODE=1 SHARED= 0 MONOLITHIC=0"

具体的参数请参看相应的文档。

---------------------------------------------------------------自己编译的悲剧开始了----------------------------------------------------

漫长的等待,是的,先使用VS2010编译,不敢全部版本编译,只编译了个静态lib库的版本,生成文件460M,小激动。然后,尝试生成dll版本,失败,问题是从VS2008版工程转换VS2010时,工程依赖性丢失了,又因为设置麻烦,不想自己亲自动手尝试,突然发现D:\wxwidgets\build\msw文件夹下还有个wx.dsw工程,唉嗨,这不是VC6.0的项目空间文件吗?果断打开,batch build,爽!然后,然后是漫长的等待,从八点半编译到十点半,编译了DEBUG/RELEASE、UNIVERSAL/NO UNIVERSAL、DLL/LIB三种组合共八种版本,唉,当初选择batch build编译的时候一不留神啊!不应该全选啊,跑的我D盘原本还有10G的剩余空间瞬间逼零,只好赶紧删除D盘的其他文件,最后,长嘘一口气,查看wxWidgets文件夹属性,9.93G!!贴图如下:

其中,lib目录下的vc_lib子文件夹大小为4.15G,build目录下的msw子文件夹内的几个vc中间目录文件大小为4.22G,我嘞个去,真是神到我了!!

以下转帖自:http://hi.baidu.com/rgdrohwvzgjlrvf/item/1d7a8f05682af0113a53eed5,异常详细清晰,拜服!!致谢!!

-----------------------------------------------------------------

VC6.0下组建wxWidgets开发环境

和 GTK、Qt、GNUstep, TK, Squeak 一样,wxWidgets 也是一种开源跨平台的 GUI 框架。 因 wxWidgets 和 MFC 有些渊源,有些亲近,故要体验一番 wxWidgets。现在最新版是 2.8.10。wxWidgets 程序还可 运行于 Windows CE、Palm OS。不但包括 GUI,还有 Media、Socket、ODBC 等库。

详情请见 wxWidgets 的官方网站是 http://www.wxwidgets.org/

假如我们下载的是 wxMSW-2.8.7-Setup.exe,就可运行它,过程中我们假定选择的安装目录是 d:\wxWidgets-2.8.10。 完成后,我们看到安装目录所在空间的大不是 127M。

注意要给 wxWidgets 有足够的剩余空间,单是编译一个版本的静态库就会增至300多M,如果还要编译动态库再选择上 DEBUG 或者 RELEASE、ASCII 或是 UNICODE 等,还要编译 sample 的话,最后空间能够暴到 2G。

第二步:编译 wxWidgets

编译方式有两种,一种是在 VC++ 中打开 wx.dsw 进行编译,另一种是用 nmake 在命令行下编译。

1) nmake 编译

运行 cmd.exe 来到命令行下,进入到目录 d:\wxWidgets-2.8.10,然后执行

D:\wxWidgets-2.8.10>nmake -f makefile.vc

默认是编译成 DEBUG 版的静态库。也许我们在编译之前需要根据自己的需要进行一些设置:

打开 D:\wxWidgets-2.8.10\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.10>nmake -f makefile.vc SHARED=1 UNICODE=1 BUILD=release

就是编译 release 版,支持 UNICODE 的动态库了。

动态库和静态库的不同体现在使用上,静态库中的代码能编译进应用程序的 exe 文件中,这个 exe 文件可单独发布,但体积较庞大。动态库可让 exe 文件执行时加载,虽然 exe 文件体积小了,但发布时必须带着相应的动态库文件。

2) VC 编译
还 可用 VC++ 打开 D:\wxWidgets-2.8.10\build\msw\wx.dsw,然后选 择 Build->Batch Build... ,我们看到每个工程都有 16 个配置,请根据应用需求勾选你的配置,如所有工程 的 Win32 Release 和 Win32 Debug 版本,然后 Build,如果你照单全收,编译将非常耗时而占空间。这种编译方式就是可以 一下操作帮你编译出所有需要的版本。

好,等等编译完之后,在目录 D:\wxWidgets-2.8.10\lib\ 会有产生一个目 录:vc_lib 是静态库的目录,默认编译有 17 个静态。如果是编译成动态库则会产生目录 vc_dll。在 vc_lib 中有 mswd 目 录,release 版对应的是 msw,里面含有 Debug 和 Release 版的 setup.h。

注意到 Debug 版和 Release 以及和 UNICODE 、动态库、静态库组合条件编译生成的文件和目录名。
静态库编译到 D:\wxWidgets-2.8.10\lib\vc_lib 目录中
动态库编译到 D:\wxWidgets-2.8.10\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.10\include,D:\wxWidgets-2.8.10\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.10\lib\vc_lib。

注意:编译成不同版的执行代码应填入相应的 Additional include directories 和 Addtional library path。
编译成依赖 DLL 的执行文件还需要加上预处理指令 WXUSINGDLL
用UNICODE 编译则需要加上预处理指令 _UNICODE
还有一种 Universal 编译,要加上预处理指令 __WXUNIVERSAL__

这样一个普通的WxWdigets项目就设置好了.

我们测试 WxWidgets 自带的例子 minimal。新建一个 minimal.cpp 文件,内容同 D:\wxWidgets-2.8.10\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.10\include
D:\wxWidgets-2.8.10\contrib\include
D:\wxWidgets-2.8.10\lib\vc_lib\mswd

对应于 Project Settings -> C/C++ Tab->Preprocessor 中的 Additional include directories

再选择 "Libraries Files",添加
D:\wxWidgets-2.8.10\lib\vc_lib

对应于 Project Settings -> Link Tab -> Input 中的 Additional library path

再选择 "Source Files",添加
D:\wxWidgets-2.8.10\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 库较少时用静态库来编译发布文件会小一些,若是用到组件多的时候,可能用动态库方便些,请酌情决定。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值