您的位置:首页 > 其它

wx网罗系列之环境搭建:wxWidget的下载、安装与编译

2007-12-19 00:24 447 查看
此文转载自北斗星君的博客,是他的Dev-Cpp/Mingw32 环境介绍系列教程中的几章。他博客地址为:http://blog.csdn.net/visioncat/http://nirvana.cublog.cn/ 。此文为他高中时所写。

第十四章 wxWidget的下载与安装

这一章我将为各位介绍如何下载安装wxWidget这个GUI开发库。
首先,我们先要知道,我们是在win32下使用wxWidget的。所以,我们现在要下载的是wxMSW这个开发库。MSW我想你也知道是什么意思。直到这篇文章写出来,wxMSW的最新版本是2.5.3。现在你可以从www.sf.net上下载,也可以在如下地址下载。http://umn.dl.sourceforge.net/sourceforge/wxwindows/wxMSW-2.5.3.zip。都是一样的。我通常喜欢用umn.dl.sourceforge.net的下载。偏爱吧。还有,wsMSW-2.5.3.zip是一个免安装的wx。而另一个wxMSW-2.5.3-setup.zip是需要安装的。差别不是太打。如果问我,我比较喜欢wxMSW-2.5.3.zip。
然后,我们就在你的驱动器上建立一个目录叫 wxWidget-2.5.3。并把压缩包里的文件解压到该目录中。注意要全部解压。当然如果你想少解一点(至少我全部都要)你可以解如下的文件夹和文件。不过注意,路径不能更改。否则的话麻烦就大了。(也就是说原来的路径是 build/msw/makefile.vc 你不能用makfile.vc替代)

build/msw/config.gcc
build/msw/makfile.gcc

include/
lib/
src/

还有一个contrib这个目录其实并不是很重要。至少你在平时使用中不会很多的用它。如果需要你可以解开,但是通常只有在需要的时候才会编译。

这样我们的库就算安装好了。当然,如果你是Dev-Cpp的朋友。你可以按照我前面介绍的自定义工程,来设置工程的参数。这里,我们在编译器参数中加入

-I(安装目录)/include/

连接器参数加入

-L(安装目录)/lib/

好了,这章就到这里了。

第十五章 wxWidget的编译与用wxWidget编译程序

现在我们用cmd.com进入build/msw。如果你按照我在第一章介绍的方式设置了。那么输入

make -f makefile.gcc

让make来编译程序。在一阵狂编之后。我们就算安装好了wxWidget。这是我们就进入demo/bombs/这个目录,输入

make -f makefile.gcc

就可以尝试我们编译的结果了。你可以将提示符出现的编译参数作为链接参数和编译参数给Mingw32使用编译自己的工程。

编译完成后,你会看到在bombs的gcc_debug目录里有一个文件bombs。运行一下,一个扫地雷出现了。(我一直不会玩扫地雷,也许我的智商不高)。也许你会下意识的看看文件的体积…… 哇!你会恐惧的发现这个程序要 12MB 那么大……。你不用害怕,因为这个是调试用的库。所以加入了大量的调试内容。12MB也是应当的。

好了,现在我们来编译一个小小的wxWidget库。还是一样,我们在编译的时候要使用一个参数。我们在build/msw/下输入

make -f makefile.gcc BUILD=release

好现在,我们就可以得到release的库了。同样,编译一下bombs来看看。进入gcc_release目录,程序一样运行,但是体积却小了N多。如果压缩一下,程序还会更小都不满1MB。

但是,我们还要更小更小的库。通常,现在网上绝大部分都介绍到上面第二种编译方式,这已经相当不错了。通常只有第一种。下面我就来介绍一下一个比较特别的编译方式。

如果各位用过MFC就会知道,其实MFC使用的是动态链接库,这样可以加大重复代码的利用率。如果更新主程序就不需要更新动态库的内容了。所以,我下面介绍如何把wxWidget编译进动态链接库中。
同样我们要进入build/msw/目录。同样用make。输入

make -f makefile.gcc BUILD=release SHARED=1

首先注意大小写,另外,release参数是必须的,否则就会生成那种可怕的恐龙文件。但是缺点是不能对wxWidget进行调试。在一段时间的编译后,我们就会在lib/gcc_dll中得到动态链接库和库文件。如果你想长期使用,就把*.dll复制到 ~/system32/目录中去好了。或者设置PATH值为该目录。接下来我们就来编译bombs测试。输入

make -f makefile.gcc BUILD=release SHARED=1

这次我们会在gcc_dll目录中找到bombs。如果直接运行,你会看到错误提示。当然如果你把动态链接库复制到/system32/目录中就不会看到了。我们把bombs.exe复制到lib/gcc_dll/目录中,运行后,就会看到程序界面。不过……看看体积……我的天,100多KB。够小了吧。我们就用这个开发wxWidget吧 ^_^

下面列出编译器的参数和连接器的参数好让各位创建自定义工程。

编译器参数:
-O2 -DHAVE_W32API_H -D__WXMSW__ -I(wxWidgets)/include -I(wxWidgets)/lib/gcc_dll/msw -Wall -I. -DWXUSINGDLL -I(wxWidgets)/samples -DNOPCH

连接器参数:
-mthreads -L(wxWidgets)/lib/gcc_dll -Wl,--subsystem,windows -mwindows -lwxmsw25_core -lwxbase25 -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregex -lwxexpat -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lodbc32

其中(wxWidgets)代表你安装wxWidget的位置。

好了,这次的wxWidget之行就到这里了。希望你能成功的走过第三步。

文外音:
其实,我早就喜欢用wxWidget了,只是生成的文件实在吓人。所以迟迟不敢再用。后来转用gtk。不过我也研究到底怎么样把wxWidget体积缩小。所以,这次我彻底的缩小了文件体积。真是一大幸事啊。不过,如果你在编译的时候发现任何的问题。可以在我的Blog响应文件的后面提出,最好留下你的邮箱地址,这样我就能以最快的速度回复你。同时希望你能关注我的文章。http://blog.csdn.net/visioncat/ 。当然本系列文章还没有结束。还在补充中。因为前期很忙,所以几个月没有更新造成了有人误认为我的文章结束了。哈,不好意思。

补充内容:
从读者的回复中,发现原来本文还是有些地方不很清楚。因此,在这里做一个小小的补充。
读者提出,是否能给出一个更简单的wxWidget的例子。所以,我在这里给出一个简单的makefile文件和一个main.cpp文件给各位。

#makefile.txt
#这个Makefile是针对使用Dll的wxWidget
#请将下面的wxPath的参数./改成你wxWidget的安装目录
wxPath=./

CF=-O2 -DHAVE_W32API_H -D__WXMSW__ -I$(wxPath)/include -I$(wxPath)/lib/gcc_dll/msw -Wall -I. -DWXUSINGDLL -I$(wxPath)/samples -DNOPCH

LF=-mthreads -L$(wxPath)/lib/gcc_dll -Wl,--subsystem,windows -mwindows -lwxmsw25_core -lwxbase25 -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregex -lwxexpat -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lodbc32

#Makefile结束

//main.cpp
//这个文件是使用Dll的wxWidget的主程序,是一个窗口(空白)

#include <wx/wx.h>

class MainApp:public wxApp
{
public:
virtual bool OnInit(void);
private:
wxFrame *mainFrame;

};

IMPLEMENT_APP(MainApp)

bool
MainApp::OnInit()
{
mainFrame = new wxFrame((wxFrame*) NULL, -1, "wxWindows");
mainFrame->Show(TRUE);

return TRUE;
}

//main.cpp结束

好了,这次的补充到这里就结束了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: