一、首先说一下配置的整体开发环境:
1. windows 10 64位;
2. CodeBlock 16.01 64位安装版本,带mingw的codeblocks-16.01mingw-setup.exe,地址http://sourceforge.net/projects/codeblocks/files/Binaries/16.01/Windows/codeblocks-16.01mingw-setup.exe;
3. wxWidgets 使用 3.0.2版本,因为CodeBlock中对应的wxWidgets版本最高是3.0.X,所以没有选择最新的3.1.0,地址https://github.com/wxWidgets/wxWidgets/releases/download/v3.0.2/wxWidgets-3.0.2.zip;
二、CodeBlock安装及环境配置
1. CodeBlock按安装默认提示执行就行了,没有特别需要注意的;
2. 为了能够在命令行cmd下使用Codeblock附带的gcc编译工具mingw,需要在windows操作系统的环境变量path中提供Codeblock中mingw文件夹的位置。
3. 打开环境变量输入框:鼠标右键点击“我的电脑” -> “属性”->“高级系统设置”->右下方“环境变量”->“系统变量”-> 打开“Path”,在属性内容最后变添加英文半角的分号“;”之后加入mingw所在的实际物理地址(包括盘符)
三、wxWidgets编译
1. 解压下载后的wxWidgets文件在没有空格的路径下(中间最好别有中文字符文件路径);
2. 进入wxWidgets解压目录的\build\msw文件夹下(这个文件是专为windows版本编译的源文件),复制文件夹路径以便在命令行下切换到该文件路径进行编译;
3. 打开命令行,切换到对应的文件夹下;
4. 输入命令编译,建议的命令如下:
mingw32-make -f makefile.gcc CXXFLAGS="-std=gnu++11" MONOLITHIC=0 SHARED=1 UNICODE=1 BUILD= release
参数简单解释如下:
1) 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” 目录。
2) 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。
3) 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构建一般是不需要的,但是当使用静态构建的时候,则是必须的。
4) 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) 参数中的CXXFLAGS="-std=gnu++11"是因为wxWidgets3.0.2编译时会使用C++11语法特性,如果不添加会在编译过程中报错,如下图:
详细参数说明看文件 <wxWidgets安装目录>/build/msw/config.gcc
详细安装说明看文件 <wxWidgets安装目录>/docs/msw/install.txt
编译时间比较长,大概每个半小时,视电脑速度定。
四、建立第一个wxWidgets工程
1. 设置wxWidgets编译需要的头文件和库文件路径,打开CodeBlocks,菜单 -> Setting -> Global variables...;
2. 在Current Set类型为default的设置下添加一个全局的wx变量指向wxWidgets安装目录,该变量在创建工程时使用,为的是wxWidgets安装目录变化之后只需更改此处;
3. 新建Project,选择wxWidgets 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时所使用的选项一致!Use wxWidgets DLL用在编译时选择SHARE为1的选项下,wxWidgets is built as a monolithic library 用在编译时MONOLITHIC为1的选项下,Enable unicode使用在编译时UNICODE为1的情况下;
10. 选择下一步之前会根据编译的结果判断是否可以对wxWidgets源码编译出的内容进行调试,这里可以不关心提示,直接下一步即可;
11. 建立完毕,如下图,Resources下选择可进行可视化编辑,如想直接改代码,可切换到Projects下
12. 设置编译项目的相关属性,解决C++11编译、wxWidgets编译链接文件和库文件无法找到的问题,在工程项目project属性中编辑Compler settings 、 Linker settings 、Search Directories,让编译时项目可以编译C++11语法,找到wxWidgets的相关编译链接文件,头文件等,设置位置CodeBlocks -> Project –> Build options
(解决错误 fatal error: wx/setup.h: No such file or directory)
13. 编译运行,不出问题的话可出现下图结果:
来源:oschina
链接:https://my.oschina.net/u/996795/blog/776600