编译wxWidgets —— windowsvc71bcc32MinGW与命令行
Posted 朝闻道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译wxWidgets —— windowsvc71bcc32MinGW与命令行相关的知识,希望对你有一定的参考价值。
编译wxWidgets —— windows、vc71、bcc32、MinGW与命令行
http://www.diybl.com/course/3_program/vc/vc_js/20071226/93502.html#
wxWidgets 是一个极具名望的提供图形界面支持的C++库,你可以用它来开发桌面应用(当然你也可以用它来开发Console程序,不过这并不常见)。
简单来说wxWidgets有这样几个特性:
①开源。当然我并不在乎它是否开源,我只在乎它是否免费。
②移植性极佳。支持很多操作系统和编译器,在C++领域,这一直是一个极具吸引力的特性。
③ 本地风格的窗体。也就是“native look and feel”,比如你用wxWidgets在windows下开发出来的桌面应用和使用windows api或者MFC开发出来的程序在控件风格、用户感受方面都非常相似(或者说完全一致)。这首先意味着当程序作为源生二进制文件发布时,用户将获得最熟悉 的感受,其次,这也意味着wxWidgets窗体拥有着最令人满意的性能。
为什么要用wxWidgets?我不知道上面几条是否已经为你提供了足够的理由。对我个人来说,除了原生程序与可移植性(这两条的确对我构成了诱惑)之外,学习使用wxWidgets还有一点十分特别的价值,那就是wxPython 。 wxPython是一个无限美好的东西,其存在使得Python成为开发桌面应用的上佳之选!优雅的Python代码,快捷的开发速度,逼进C++的用户 界面响应,深度可能的视觉感受——如果不是Python和wxPython需要额外的运行时环境支持,我恐怕会首选Python做为桌面开发的语言。 wxPython是wxWidgets的移植,其血脉相传使得wx的学习具有双重价值。(事实上,wxPython与wxWidgets共享一份文档,不 过这份文档对Python的支持并不好。)
顺便插一句,在我看到wxPython开发出来的应用之后,甚至怀疑wxWidgets开发出来的程序是否能够得到更好的用户响应。wxWidgets没有令我失望。
好啦,wxPython的美好先放在一边,我们此次要面对的是wxWidgets^_^
此篇只讲wxWidgets在windows下的安装、编译及测试,linux下和wxWidgets的开发放在后续文章之中。
我的操作系统是Windows XP。
下载与安装:
你可以在wxWidgets的官方站点找到最新版本的下载(http://www.wxwidgets.org/downloads/ ),或者直接到SoureForge(http://sourceforge.net/project/showfiles.php?group_id=9863 )下载。如果你只需要在windows下使用,下载wxMSW,如果还要在其他平台上应用,可以下载wxAll。
在我写这篇文章的时候,最新的稳定版本是2.8.3。
下载之后运行安装或者解压到你指定的目录就可以进入下一步了。以后我们提“wxWdigets目录”指的就是这个安装目录。例如我的wxWidgets目录是F:/libs/wxWidgets-2.8.3。
提示:wxWidgets目录下docs/msw/install.txt是一份安装指导,你可以获得大多数你需要的参考。
编译:
首先介绍下我手头的三款编译器,它们分别是VC7.1(2003),Borland C++ Compiler 5.5,MinGW。我假设你至少正确安装了其中的一款编译器。
编译的过程其实是很简单的,我们所使用的工具是命令行。如果你定要使用Visual Studio的IDE,我们也给出一点提示。
①VC7.1(Visual Studio .NET 2003)
注:如果你使用的vc6或者vc8,过程都是类似的。
要使用VC7.1来编译wxWidgets,首先要保证载入了合适的环境变量。
方 法零:如果你的环境变量是自动注册的,那就不必再载入了。测试方法:先启动一个命令行窗口(开始菜单->运行->cmd),敲入nmake或 cl,如果显示“不是内部或外部命令,也不是可运行的程序或批处理文件”,那你的环境变量没有自动注册,你需要使用以下方法中的一个来载入(别忘了载入之 后测试下)。
方法一:最好的方法是使用VC提供的命令行工具,启动方式如下:开始菜单->Microsoft Visual Studio .NET 2003-> Visual Studio .NET 工具->Visual Studio .NET 2003 命令提示。
方法二:如果你没有在开始菜单里面找到方法一中的命令行工具,可以手动载入一个bat,bat位置一般是:Microsoft Visual Studio .NET 2003/Common7/Tools/vsvars32.bat。其中Microsoft Visual Studio .NET 2003是你的VS.NET安装目录。比如我的VS安装目录是F:/Microsoft Visual Studio .NET 2003,载入方式如下:先启动一个命令行窗口(开始菜单->运行->cmd),然后敲入"F:/Microsoft Visual Studio .NET 2003/Common7/Tools/vsvars32.bat"(注意,需要加上引号)。
方 法三:如果你用的是vc6,可能没有vsvars32.bat这个文件,没关系,我们还有一个vcvars32.bat。不过还是以vc7.1为例:启动 命令行窗口,敲入"F:/Microsoft Visual Studio .NET 2003/Vc7/bin/vcvars32.bat"(注意,需要加上引号)。如果你的是vc6,需要调整相应路径。
现在你的环境变量已经注册好了,但是请不要关掉你的命令行窗口!我们还有很重要的事要做^_^
以我的环境为例,进入wxWidgets目录下的build/msw文件夹:
C:/Documents and Settings/username>F:
F:/>cd libs/wxWidgets-2.8.3
F:/libs/wxWidgets-2.8.3>cd build/msw
F:/libs/wxWidgets-2.8.3/build/msw>
接 下来就要进入编译的真正环节。编译wxWidgets有一些选项,可以参考wxWidgets目录下的docs/msw/install.txt。一般来 说最常用的两个选项是Debug/Release,以及Unicode/ANSI。默认的编译版本是Debug+ANSI。
如果你想使用默认选项,键入:
nmake -f makefile.vc
如果你想手动设置一些编译选项,比如使用Uniocde+Release版本,键入:
nmake -f makefile.vc BUILD=release UNICODE=1
你当然可以按你的需要编译几套wxWidgets。在我的机器上(2003年的机器),编译一个版本的wx,大概只需要5分钟作用,你的机器很可能会更快。每套wx需要约200M~300M的硬盘空间。
②Borland C++ Compiler 5.5
如果你使用bcc32,那么我假定你已经安装过borland的命令行编译器。对不起我没有用过C++ Builder,但是我想C++ Builder也是包含这一套命令行工具的。
使 用bcc32需要borland提供的make程序。在我电脑上bcc32安装的目录是F:/Program Files/BCC55,所以这个make的路径是F:/Program Files/BCC55/Bin/make.exe。你可能希望把它放入环境变量,这个随你的喜好,不过在编译wxWidgets的时候我还是推荐你使用 绝对路径,因为你的机器上可能有多个make,而且他们之间几乎都是不兼容的(至少我机器上就是这样),所以你敲make的时候可能需要额外的精力来关 注。
下面进以我的环境为例,进入wxWidgets目录下的build/msw文件夹:
C:/Documents and Settings/username>F:
F:/>cd libs/wxWidgets-2.8.3
F:/libs/wxWidgets-2.8.3>cd build/msw
F:/libs/wxWidgets-2.8.3/build/msw>
接 下来就要进入编译的真正环节。编译wxWidgets有一些选项,可以参考wxWidgets目录下的docs/msw/install.txt。一般来 说最常用的两个选项是Debug/Release,以及Unicode/ANSI。默认的编译版本是Debug+ANSI。
如果你想使用默认选项,键入:
"F:/Program Files/BCC55/Bin/make.exe" -f makefile.bcc
注意:如果你的make路径中有空格(如Program Files),需要在make路径两边加上双引号。
如果你想手动设置一些编译选项,比如使用Uniocde+Release版本,键入:
"F:/Program Files/BCC55/Bin/make.exe" -f makefile.bcc -DBUILD=release -DUNICODE=1
注意:此处的变量定义语法与其他的make不同。
如果你确认你的PATH环境变量中包含了正确的make,也可以直接敲:
make -f makefile.bcc
或者:
make -f makefile.bcc -DBUILD=release -DUNICODE=1
你可以按需要编译几套wxWidgets。在我的机器上(2003年的机器),编译一个bcc32版本的wx,大概只需要5分钟作用,你的机器很可能会更快。每套wx需要约200M左右的硬盘空间,比VC占用的要小些。
③MinGW
凭良心讲,我并不推荐你在MinGW中使用wxWidgets。
MinGW版本的编译步骤比较繁琐,编译时间漫长,编译出来的库更是巨大。但是据说MinGW Studio附带有编译好的wx,不知道是不是真的。
我是参照这篇文章进行的,所以你也可以将其作为参考:http://www.wxwidgets.org/wiki/index.php/Compiling_WxWidgets_With_MSYS-MinGW
首先你要安装MinGW(我假设你已经安装好了),为了有一个类unix的shell,我们还需要安装MSYS(下载地址:http://www.mingw.org/download.shtml )。
注意:MSYS的安装路径不能有空格(我印象中如此)。
安装好MSYS启动msys,出现一个shell,进入wxWidgets的目录。以我的环境为例:
cd /f/libs/wxWidgets-2.8.3
新建一个目录,比如叫mingw-debug:
mkdir mingw-debug
进入目录:
cd mingw-debug
配置MinGW的工程:
../configure --disable-shared --enable-debug
你可以使用../configure --help来查看其它选项,比如编译uncode版本需要--enable-unicode,编译release版本需要--disable-debug。
这个配置过程花费了我大约10分钟时间。
配置之后在目录中运行make即可:
make
这个过程又消耗20分钟左右,1.7G的硬盘。比起前面两款编译器,实在并不令人愉快。
④VC的IDE
如果你使用VC6,那么也可以使用此方法。
进 入wxWidgets目录下的build/msw文件夹,有一个wx.dsw,运行之。你可以在build窗口(即平常显示debug或release的 那个窗口)中选择需要编译的版本,如“Win32 Debug”、“Win32 Unicode Release”,还是挺方便的^_^。(注:如果没有显示此窗口,在工具栏上右击,跳出的菜单中选中"build"即可。)
此过程时间空间的耗费请参考①。
到 这里编译的大部分内容都已经完成,下面你可能想体验一下wxWidgets。在wxWidgets目录下有一个samples子目录,有很多小程序,用以 展示wxWidgets的各个组件;wxWidgets目录下另有一个demos目录,里面有几个小应用(包括一个小的扫雷游戏和纸牌游戏和其他)。
你可以进入相应的samples目录或者子目录,然后按上面编译wxWidgets一样的方法来编译这些例子。
以samples下的controls为例:
①VC7.1(Visual Studio .NET 2003)
按前面所述配置好环境变量并编译过wxWidgets之后,进入samples/controls,然后按你编译过的库版本编译这个示例。
如果你编译wxWidgets时使用的是:
nmake -f makefile.vc
那么就使用同样的命令编译示例:
nmake -f makefile.vc
如果你编译wxWidgets时使用的是:
nmake -f makefile.vc BUILD=release UNICODE=1
那么编译示例的时候使用:
nmake -f makefile.vc BUILD=release UNICODE=1
如果你使用“nmake -f makefile.vc”编译库却使用“nmake -f makefile.vc BUILD=release UNICODE=1”编译例子,会触发所依赖的库被编译。
②Borland C++ Compiler 5.5
编译过wxWidgets之后,进入samples/controls,然后按你编译过的库版本编译这个示例。
如果你编译wxWidgets时使用的是:
"F:/Program Files/BCC55/Bin/make.exe" -f makefile.bcc
那么就使用同样的命令编译示例:
"F:/Program Files/BCC55/Bin/make.exe" -f makefile.bcc
如果你编译wxWidgets时使用的是:
"F:/Program Files/BCC55/Bin/make.exe" -f makefile.bcc -DBUILD=release -DUNICODE=1
那么编译示例的时候使用:
"F:/Program Files/BCC55/Bin/make.exe" -f makefile.bcc -DBUILD=release -DUNICODE=1
如果你使用A命令编译库却使用B命令来编译例子,会触发所依赖的B库被编译。
注 意:如果你认为自己设置了合适的PATH环境变量,并使用make -f makefile.bcc这样的简洁命令成功编译过了wxWidgets,那么此时依旧要注意。如果你PATH中的make.exe不是BCC的bin目 录中的那个,那么你很可能会失败。无论如何,倘若你得到了一个错误,可以考虑像上面一样使用BCC55/Bin/make.exe的绝对路径。
③MinGW
如果你按前面的方法在MinGW下编译过了MinGW,那么进入刚刚新建的MinGW工程目录(比如mingw-debug)下的samples/controls(而不是wxWidgets主目录下的samples/controls)。
然后只要敲:
make
因为其他的配置已经注册到你建的整个工程中了(比如mingw-debug)。
④VC的IDE
在示例的目录下也有相应的VC6工程文件,如controls.dsw。打开它,选择相应的版本(如“Win32 Debug”),运行之。
你也可以选择编译所有的samples。只要在samples的目录(而不是controls之类的子目录)敲相应的make命令(或者使用此目录下的VC工程文件)即可,方法和编译单个例子完全一样——但是请先不要试!
编译一套wxWidgets的所有samples需要占用极长的时间和硬盘空间(不少于30分钟和1.5G硬盘)!所以在准备编译所有例子之前确认你有足够的时间和空间——以及一点耐心和宠辱不惊的气度!
警告:不要试图用MinGW编译全部的samples!除非你有15G的剩余空间和2个小时的清闲时间——以及一点无聊和自我牺牲的精神(如果你完成了这些,可以把你统计到的具体数据发给我^_^)。
编译了你需要的例子之后就可以执行这些示例了。在相应的目录下(如controls)会有对应的目录(如vc_mswd,如果你使用debug版本的vc),里面有你期待着的可执行程序。运行它!
从 体积上来讲,编译出来的wxWidgets应用,debug版本大约2M多,release版本1M多,比MFC要大一些。不过这个年代(以及将来的岁月 里),1M不到的差距是在无关痛痒。例外:MinGW编译出来的debug版本的示例大小一般为12M以上!由于我没有足够的空间(和时间)编译 release版本的wxWidgets,所以不知道release版本的应用大小如何。如果有人成功编译了这些,可以写信告诉我实际的数据。
在windows下编译wxWidgets到这里就结束了。以后很可能会写些linux下的编译文章,以及如何使用wx建立自己的应用(包括Bakefile的使用)。
我 想这篇文章一定显得十分冗长,详略得当对我来说实在是很困难。有好的建议和批评欢迎写信给我:[email protected]。你也可以在此文之后留 言,但是等我发现有人在此处留言恐怕是一个月之后的事了,而一个月之后你若还能想起曾在这里留言,恐怕更是人类移居火星之后的事了。
http://blog.csdn.net/idx001/article/details/5213271
以上是关于编译wxWidgets —— windowsvc71bcc32MinGW与命令行的主要内容,如果未能解决你的问题,请参考以下文章
使用 wxWidgets 库在 linux 中使用 codelite 进行 arm 交叉编译时出错
编译wxWidgets —— windowsvc71bcc32MinGW与命令行