使用wxWidgets进行跨平台GUI开发(附1)

补充说明wxWidgets在Windows下使用CMake的配置

wxWidgets官方提供了一个在Windows下使用CMake来构建wxWidgets库的方法,这样便于你自己用CMake构建项目。可参考源码包含的文档,这在下列这样的路径里:

..\wxWidgets-3.x.x\docs\doxygen\overviews\cmake.md

..\wxWidgets-3.x.x\samples\minimal\CMakeLists.txt

构建并生成CMake配置

打开下载的wxWidgets-3.x.x这样的一个文件夹,里面会有个CMakeLists.txt文件,在此路径进入cmd

输入命令(需要先配置好环境变量,我们指定安装路径,编译为静态库,创建out作为构建目录)
cmake -DCMAKE_INSTALL_PREFIX=%WXWIN% -DwxBUILD_SHARED=OFF -B build/cmake/out

然后回车,我们就能构建好默认的64位程序架构配置(系统相关),然后输入编译生成命令(你也可以从sln在Microsoft Visual Studio 2010或更高版本的集成开发环境(IDE)来构建使用wxWidgets的项目,这样其实更推荐在build\msw目录下直接集成编译。如果你先前编译过wxWidgets库,记得备份lib这个文件夹)
cmake --build ./build/cmake/out --target install

这会默认编译好Debug版本,建议先用例程测试验证Debug版本,然后输入
cmake --build ./build/cmake/out --target install --config Release

编译安装Release版

现在构建32位的wxWidgets库,输入以下命令
cmake -A Win32 -DCMAKE_INSTALL_PREFIX=%WXWIN% -DwxBUILD_SHARED=OFF -B build/cmake/out

然后一样的编译生成步骤

请不要忘了生成的CMake配置文件,它们存在于安装目录的lib\cmake、lib\vc_lib和lib\vc_x64_lib都有的mswu和mswud文件夹里,我们可以把这些配置迁移到相同编译工具链生成的wxWidgets库中(如MSVC)

现在说明最小验证程序,找到官方提供的最小示例程序,在这样的路径

..\wxWidgets-3.x.x\samples\minimal

还是使用cmd编译

复制代码
cmake -B build -DCMAKE_PREFIX_PATH=%WXWIN%/lib/cmake/wxWidgets
(提示,你可以自定以设置添加环境变量如WXWINCMAKE其值填写为%WXWIN%/lib/cmake/wxWidgets,这样你就可以更简洁设置变量-DCMAKE_PREFIX_PATH=%WXWINCMAKE%)
cmake --build ./build

这样会在此build\Debug下生成一个minimal.exe可执行程序,运行效果如图

总结

使用此构建方法可以直接生成一些繁琐的CMake配置,简化了CMake构建项目的工作。

可以参考minimal的CMakeLists.txt文件,find_package命令使用如下
find_package(wxWidgets 3.2 COMPONENTS core base REQUIRED CONFIG)

如果是直接集成编译的库,CMake是不能成功构建minimal的,因为CONFIG指示CMake只查找Config模式的配置文件。没有安装上述方式的配置,只能使用
find_package(wxWidgets 3.2.4 REQUIRED COMPONENTS core base adv html xml net aui stc xrc gl media qa richtext propgrid ribbon webview)

这看起来就复杂不少,因为缺乏预先的配置,所以如果你使用CMake构建项目,我建议你使用上述方式的配置。

提示:你可以查看lib\cmake\wxWidgets\wxWidgetsConfig.cmake文件,中间有这样一个命令
foreach(libname wxbase;wxnet;wxcore;wxadv;wxaui;wxhtml;wxpropgrid;wxribbon;wxrichtext;wxwebview;wxstc;wxxrc;wxmedia;wxgl;wxqa;wxxml)

看起来是不是很眼熟!有了这个我们就不用重复配置这些组件。

相关推荐
南岩亦凛汀4 天前
快速上手Ultimate++的编译链接和配置
c++·gui·开源框架
一只小bit4 天前
Qt 绘图核心教程:从基础绘制到图像操作全解析
前端·c++·qt·gui
kirk_wang5 天前
Flutter video_thumbnail库在鸿蒙(OpenHarmony)端的完整适配实践
flutter·移动开发·跨平台·arkts·鸿蒙
●VON6 天前
Flutter for OpenHarmony:基于可扩展标签系统与对话框状态隔离的 TodoList 个性化分类体系实现
学习·flutter·架构·跨平台·von
●VON7 天前
Flutter for OpenHarmony:基于原子清空与用户意图防护的 TodoList 批量删除子系统实现
学习·flutter·架构·跨平台·von
●VON7 天前
面向 OpenHarmony 的 Flutter 应用实战:TodoList 多条件过滤系统的状态管理与性能优化
学习·flutter·架构·跨平台·von
●VON8 天前
Flutter 与 OpenHarmony 技术选型分析:为何构建待办事项应用选择此组合?
学习·flutter·跨平台·von
RFCEO9 天前
HTML编程 课程五、:HTML5 新增语义化标签
前端·html·html5·跨平台·语义化标签·可生成安卓/ios·html最新版本
2401_8414956411 天前
【Python高级编程】单词统计与查找分析工具
数据结构·python·算法·gui·排序·单词统计·查找
kirk_wang11 天前
Flutter `flutter_udid` 库在鸿蒙(OpenHarmony)平台的适配实践
flutter·移动开发·跨平台·arkts·鸿蒙