编译wxWidgets —— windows、vc71、bcc32、MinGW与命令行
编译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的使用)。
我 想这篇文章一定显得十分冗长,详略得当对我来说实在是很困难。有好的建议和批评欢迎写信给我:iambus@gmail.com。你也可以在此文之后留 言,但是等我发现有人在此处留言恐怕是一个月之后的事了,而一个月之后你若还能想起曾在这里留言,恐怕更是人类移居火星之后的事了。
http://blog.csdn.net/idx001/article/details/5213271
编译wxWidgets —— windows、vc71、bcc32、MinGW与命令行的更多相关文章
- Windows下使用MinGW在命令行编译运行C++程序
之前学习C语言的时候都是用IDE类似CodeBlocks的工具写完直接编译运行的,今天突然心血来潮,自己下一个编译器,在命令行下,编译运行C++程序,了解一下编译过程. 一.安装编译器 首先你需要下载 ...
- windows系统下在dos命令行kill掉被占用的pid (转)
原文出自:http://www.2cto.com/os/201304/203771.html windows系统下在dos命令行kill掉被占用的pid 1.开始-->运行-->c ...
- windows 增加右键功能 -->用命令行打开
windows 增加右键功能 -->用命令行打开 实现 注册表 以管理员权限CMD 到指定文件夹 Windows Registry Editor Version 5.00 [HKEY_CLASS ...
- windows脚本(VBS)之cmd命令行的妙用
windows脚本(VBS)之cmd命令行的妙用 (2009-08-06 13:40:55) 转载▼ 标签: 脚本 cmd 命令行 vbs js 简单 公式 windows it 分类: 计算机 脚本 ...
- JavaWeb问题记录——在Windows上启动Tomcat后命令行窗口乱码
JavaWeb问题记录——在Windows上启动Tomcat后命令行窗口乱码 摘要:本文主要记录了在Windows上启动Tomcat后,命令行窗口出现乱码的问题及解决办法. 问题重现 在Windows ...
- window7使用MinGW在命令行编译C/C++源程序(从零开始,设置PATH,LIBRARY_PATH,C_INCLUDE_PATH)
1.要想在window命令行下面编译C/C++源程序,对于初学者来说,需要在window环境下面配置好GCC和G++编译器,我使用的是MinGW,下载地址为:http://sourceforge.ne ...
- windows在文件夹快速打开命令行
普通打开方式 按住shift键,在指定的文件夹上右键,会发现有"在此处打开命令行窗口"的字样,选择该项,即可打开命令行,并且路径刚好是你刚才选择的文件夹路径 管理员方式打开 修改注 ...
- windows下强大的wmic命令行工具
windows最令网管诟病的地方就是命令行没有unix和linux强大.但这种情况正在不断改观,windows命令行也越来越强大了.其中,微软耗费大量精力打造的wmi就是一例. 获得进程ID与进程名 ...
- Windows 10 替换 cmd 的命令行工具
最近找 Windows 10 的命令行工具,发现了 Windows 自带的 PowerShell ,确实功能强大.推荐. 查找方法:搜索,PowserShell, 打开就能用. https://www ...
随机推荐
- Avro基础 分类: C_OHTERS 2015-02-14 19:56 310人阅读 评论(0) 收藏
一.Avro的基本功能 1.定义了数据模式文件的语法,一般使用json文件.以及一些数据基本类型与复杂类型. 2.定义了数据序列化到文件后的数据格式,此格式可供各种语言进行读取. 3.为部分语言定义了 ...
- 在vue中使用babel-polyfill
在 Vue.js项目中使用Vuex,Vuex 依赖 Promise,所以如果你的浏览器没有实现 Promise (比如 IE),那么就需要使用一个 polyfill 的库 我们可以通过babel-pr ...
- 屏蔽OCulus Rift的官方警告的方法实测
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/45870243 作者:car ...
- 【record】9.24..10.1
因为参加比赛所以做得比较少了
- ios开发核心动画七:核心动画与UIView动画的区别
/** UIView与核心动画区别?(掌握) 1.核心动画只作用在layer. 2.核心动画看到的都是假像,它并没有去修改UIView的真实位置. 什么时候使用核心动画? 1.当不需要与用户进行交互, ...
- auto_create_partition
#!/usr/bin/env python # -*- encoding: utf8 -*- import calendar import time import os import sys from ...
- Thinking in UML 学习笔记(四)——UML核心视图之活动图
在UML中活动图的本质就是流程图,它描述了为了完成某一个目标需要做的活动以及这些互动的执行顺序.UML中有两个层面的活动图,一种用于描述用例场景,另一种用于描述对象交互. 活动图只是我们用来描述业务目 ...
- css 父div如何包裹带有float属性的子div,float子div如何撑开父div
来自网络摘抄 原始代码 <style> #div1{border:1px solid red;float:left;} #div2,#div3{float:right;border:1px ...
- jquery pagination分页的两种实现方式
原文链接:http://blog.csdn.net/qq_37936542/article/details/79457012 此插件是jQuery的ajax分页插件.如果你用到此插件作分页的时候,涉及 ...
- amazeui中内置的web组件有哪些且如何用
amazeui中内置的web组件有哪些且如何用 一.总结 一句话总结: 1.组件还是jquery.js+amazeui.js,和插件一样,准确的说是amazeui.css+jquery.js+amaz ...