wxWidgets教程00:基于CodeBlocks安装&配制

使用CodeBlocks进行wxWidgets C++ GUI开发,步骤:

1. 下载安装Code::Blocks: www.codeblocks.org,建议下载带mingw版本的,mingw即Minimalist GNU for Windows ,包涵GNU GCC编译器

2.  下载最新版本的 wxWidgets,官方地址: https://www.wxwidgets.org/ ,目前最新版本为3.0.0,Windows版本下载地址: http://sourceforge.net/projects/wxwindows/files/3.0.0/binaries/ ,如果不知道要下载哪个,请选择列表上面的 Download wxMSW-3.0.0-Setup.exe (46.8 MB)

3. 安装wxWidgets到C:\wxWidgets-3.0.0或其它目录下

4. 编译wxWidgets,至于为啥要编译就不解释了,如果不想自己编译,可以到 http://wxpack.sourceforge.net/Main/HomePage 下载已经编译好的库(wxPack)的最新版本。

    编译需要用mingw32-make命令,先将mingw所在目录加入系统环境变量Path中,默认基于CodeBlocks目录是:C:\Program Files\CodeBlocks\MinGW\bin

    打开cmd,进入<wxWidgets安装目录>\build\msw,分别输入如下命令行:

        清理:mingw32-make -f makefile.gcc clean

        编译Release版本:mingw32-make -f makefile.gcc MONOLITHIC=0 SHARED=1 UNICODE=1 BUILD= release

        编译Debug版本:mingw32-make -f makefile.gcc MONOLITHIC=0 SHARED=1 UNICODE=1 BUILD= debug

        分别建立release 和 debug 版本的库,对应目录gcc_mswudll和gcc_mswuddll。编译时间比较长的哟^_^,大概每个半小时,视电脑速度定。

        详细参数说明看文件 <wxWidgets安装目录>/build/msw/config.gcc
        详细安装说明看文件 <wxWidgets安装目录>/docs/msw/install.txt

        简单说一下用到的参数涵义:

BUILD 控制wxWidgets构建调试版本(BUILD=debug)或者是发布版本(BUILD=release)。绝大多数情况下你只需要wxWidgets的发布版本就可以了,因为你应该不想要去调试wxWidgets自身,同时你依然可以通过链接wxWidgets的发布版本来构建你自己的程序的调试版本。

- 调试构建wxWidgets会创建带有”d”后缀的库,例如”libwxmsw28d.a”、”wxmsw28d_gcc_custom.dll”。

- 调试构建wxWidgets会在wxWidgets库的输出目录中创建”mswd” 或者 “mswud” 目录。

- 发布构建wxWidgets创建的库没有”d”后缀,例如”libwxmsw28.a”、”wxmsw28_gcc_custom.dll”。

- 发布构建wxWidgets会在wxWidgets库的输出目录中创建”msw” 或者 “mswu” 目录。

SHARED 控制wxWidgets是构建DLL(SHARED=1)还是静态库(SHARED=0)。利用构建的DLL,主程序构建时间较快,可执行文件更小。但是可执行文件加上wxWidgets DLL的总大小更大,但是不同的可执行文件可以使用同一个DLL。

- wxWidgets的DLL构建会创建导入库(如 libwxmsw28.a)以及DLL文件(如wxmsw28_gcc_custom.dll)。你必须在发布你的程序的时候包含这个DLL。

- wxWidgets的静态构建只会创建静态库(如 libwxmsw28.a),发布的时候也无须包含wxWidgets的DLL。

MONOLITHIC 控制是构建一个单一的库(MONOLITHIC=1)还是多个组件库(MONOLITHIC=0)。使用单一构建,项目的设置和开发会更加简单,如果你同时使用DLL构建的话,你只需要分发一个DLL文件。如果使用非单一构建(multilib),会构建出多个不同的库同时你可以避免将整个wxWidgets的基本代码链接到主程序,就可以去掉不需要的库。同时你也必须确保你选择了正确的组件库。

- wxWidgets的单一构建仅会创建一个wxWidgets导入库(如libwxmsw28.a)以及一个DLL(如wxmsw28_gcc_custom.dll)。

- wxWidgets的多库(multilib)构建会创建多个导入库(libwx28_base.a等)以及多个DLL文件。

- 无论何种wxWidgets构建,都会创建额外的静态库(如libwxexpat.a、libwxjpeg.a等)。这些库对于wxWidgets的DLL构建一般是不需要的,但是当使用静态构建的时候,则是必须的。

UNICODE 控制wxWidgets以及你的程序是否使用支持Unicode的宽字符串。大多数Windows 2000或更高系统上的应用程序都应该支持Unicode。早期的Windows版本不一定有Unicode支持。你应该总是使用wxWidgets的_("string")和_T("string")宏来确保硬编码的字符串编译时是正确的类型。

- wxWidgets的Unicode(UNICODE=1)构建将会创建带有”u”后缀的库,例如”libwxmsw28u.a”、”wxmsw28u_gcc_custom.dll”。

- wxWidgets的Unicode构建会在wxWidgets库的输出目录中创建”mswu”或”mswud”目录。

- wxWidgets的ANSI(UNICODE=0)构建创建的库没有”u”后缀,例如”libwxmsw28.a”、”wxmsw28_gcc_custom.dll”。

- wxWidgets的ANSI构建会在wxWidgets库的输出目录中创建”msw”或”mswd”目录。

5. 建立第一个wxWidgets工程

    1. 打开CodeBlocks,菜单 -> Setting -> Global variables...

    2. 添加一个global wx变量指向wxWidgets安装目录,该变量在创建工程时使用,为的是wxWidgets安装目录变化之后只需更改此处

    3. 新建Project,选择wxWidgets project,或者也可以选择Empry project,后面再手动加入依赖库

    4. Go -> 下一步,选择wxWidgets 3.0.x

    5. 下一步,输入工程名、目录; 再下一步,作者等(可不填)

    6. 下一步,选择GUI Builder,如果想完全自己编写代码就选None,如果想可视化界面,选wxSmith或wxFormBuilder,如果不知道要选哪个就选wxSmith吧;  Application Type分为Dialog和Frame,如果你用过其它GUI的话应该很清楚,不清楚的化Google吧

    7. 下一步,选择wxWidgets位置,如果配制了第2步默认$(#wx)就OK,也可以直接选择wxWidgets安装目录

    8. 下一步,选择GNU GCC Compiler或其它编译器,钩选Debug和Release

    9. 下一步,选择你的wxWidgets构建选项。必须和你编译wxWidgets时所使用的选项一致!每项代表什么意思还是Google吧

6. 建立完毕,如下图,Resources下选择可进行可视化编辑,如想直接改代码,可切换到Projects下

    Build and Run,不出问题的话可出现下图结果:

    当然,有可能你没有完全按照上面5.9的选项操作,然后遇到了这个错: fatal error: wx/setup.h: No such file or directory ,这时你可以把setup.h从wxWidgets-3.0.0\include\wx\msw拷贝到wxWidgets-3.0.0\include\wx解决,但这只是掩盖问题的方法而以,还因此改变了好像不该去改变的东西。 这个问题是因为在5.9中的选择与4中的编译选项不一致,当然可以重建工程或重新编译解决,但其实想一想,建立工程的步骤选项其实都是保存在工程文件里的,所以这些理所当然可以修改。 可以在Projects下右键工程,选择Build options...,再如下图操作:把Search directories下的【$(#wx)\lib\gcc_ lib \mswud】都改成【$(#wx)\lib\gcc_ dll \mswud】,因为wxWidgets-3.0.0\lib下根本就没有gcc_lib目录(如果编译选项和4一样的话)

    解决上面问题后,你还可能遇到一系列cannot find的问题: cannot find -lwxbase30ud , cannot find -lwxmsw30ud_core ,  cannot find -lwxbase30ud_xml ,可以像上图中添加新的Search目录,或者也可以在Linker setting选项卡,删除不存在的然后添加libwxmsw30ud.a(如果按4编译的话)。

    相信再看到no such和connot find系列的问题时候,你可以很淡定了。。。

7. Release,为什么CodeBlocks始终只生成Debug版本的exe呢,为何没有Release版本的呢,连Release目录都没有生成?找了好久都没有办法,发现只有在右键Projects -> Properties... -> Build targets下把Debug删了才奏效。 仔细一想,CodeBlocks应该不至于傻成那样,终于,在菜单Build -> Select target下找到了这个让人爱恨交加的选项:

    原因应该是避免每次都花时间去编译生成两种版本吧!

    最后把wxWidgets-3.0.0\lib\gcc_dll\wxmsw30u_gcc_custom.dll和exe一起打包就可以在其它电脑上运行啦,我想这应该是很多人想要的!

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章