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

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

相关推荐
深念Y3 天前
从0到1:推拿头疗店ERP系统的需求分析与架构设计全复盘
物联网·需求分析·跨平台·saas·数字化·项目·erp
CSharp精选营3 天前
Avalonia UI:.NET 跨平台桌面开发的“真香”选择
.net·跨平台·avalonia·桌面开发·ui框架
王江奎5 天前
Windows 跨平台 C/C++ 项目中的 UTF-8 路径陷阱
c++·windows·跨平台
Ulyanov6 天前
《PySide6 GUI开发指南:QML核心与实践》 第二篇:QML语法精要——构建声明式UI的基础
java·开发语言·javascript·python·ui·gui·雷达电子对抗系统仿真
REDcker6 天前
跨平台编译详解 工具链配置与工程化实践
linux·c++·windows·macos·c·跨平台·编译
Ulyanov7 天前
《玩转QT Designer Studio:从设计到实战》 QT Designer Studio状态机深度应用:智能待办事项管理系统
开发语言·python·qt·gui·雷达电子对抗系统仿真
ZGi.ai8 天前
LangChain做了什么?企业场景中它和专用AI平台的定位区别
人工智能·开源框架·企业ai·- langchain·- ai应用开发
charlie11451419111 天前
通用GUI编程技术——图形渲染实战(三十三)——Direct2D与Win32/GDI互操作:渐进迁移实战
c++·图形渲染·gui·win32
月巴月巴白勺合鸟月半11 天前
从 Delphi 到 FMX:Borland/Embarcadero 跨平台开发三十年兴衰史
跨平台·delphi
charlie11451419114 天前
通用GUI编程技术——图形渲染实战(三十一)——Direct2D效果与图层:高斯模糊到毛玻璃
c++·图形渲染·gui·win32