• 编译wxWidgets —— windows、vc71、bcc32、MinGW与命令行(官方文档:Compiling wxWidgets with MSYS-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

  • 相关阅读:
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 实现业务
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 开发流程
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 报表系统集成说明
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 处理报表
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 数据访问
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 分布式应用
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 实现插件
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 对象设计器使用帮助
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 数据层开发
    Jquery 中的CheckBox、 RadioButton、 DropDownList、CheckBoxList、RadioButtonList的取值赋值
  • 原文地址:https://www.cnblogs.com/findumars/p/7690010.html
Copyright © 2020-2023  润新知