使用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)

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

相关推荐
jz_ddk2 天前
[LVGL] 从0开始,学LVGL:进阶应用与项目实战(上)
linux·信息可视化·嵌入式·gui·lvgl·界面设计
jz_ddk5 天前
[LVGL] 从0开始,学LVGL:基础构建篇 - 掌握UI的核心构建块
linux·网络协议·ui·rpc·嵌入式·gui·lvgl
十五年专注C++开发5 天前
C++类型转换通用接口设计实现
开发语言·c++·跨平台·类设计
中草药z6 天前
【Docker】零基础上手:原理+Ubuntu/Windows GUI 安装 + 镜像源 / 目录优化
运维·ubuntu·docker·容器·gui·安装·cgroups
可均可可6 天前
如何在统信系统中将 Avalonia 软件程序打包 Deb 安装包
跨平台·avalonia·deb·deb 打包·统信系统
奔跑吧邓邓子13 天前
【C++实战(68)】从0到1:C++跨平台开发之Windows API深度实战
c++·windows·实战·跨平台·windows api
红烧code17 天前
【Rust GUI开发入门】编写一个本地音乐播放器(15. 记录运行日志)
rust·gui·log·slint
红烧code17 天前
【Rust GUI开发入门】编写一个本地音乐播放器(12. 国际化应用-多语言支持)
rust·i18n·gui·slint
十五年专注C++开发18 天前
通信中间件 Fast DDS(三) :fastddsgen的安装与使用
linux·c++·windows·中间件·跨平台
红烧code19 天前
【Rust GUI开发入门】编写一个本地音乐播放器(11. 支持动态明暗主题切换)
rust·gui·theme·slint