CMake创建wxWidgets桌面应用
环境
Windows 10 CMake 3.28 MinGW 64 8.1 wxWidgets 3.2.4
wxWidgets
GitHub: https://github.com/wxWidgets/wxWidgets/ 文档地址: https://docs.wxwidgets.org/stable/page_topics.html 下载地址:https://www.wxwidgets.org/downloads/
点击下载按钮 找到 MinGW-w64 8.1 ,下载头文件和库文件
头文件
库文件 (32/64位)
Development Files(开发时用) Release DLLs(正式发布时用) 这里样例中是直接引的官方做好的库,最合适你的环境的方式还是从源码构建库。使用源码构建时,操作很简单,直接build即可,不过需要注意官方Git仓库中还引了其他仓库,要记得一并下载,不然执行CMake时会报缺失文件的错。
项目结构
wx-demo # 项目目录
--|build # 工程构建目录,存临时生成的文件
--|--|...
--|include # 头文件目录
--|--|...
--|src # 源文件目录
--|--|...
--|external # 引入第三方库文件的所在的文件夹
--|--|wxWidgets
--|--|--|include # wxWidgets头文件
--|--|--|lib # wxWidgets库文件
--CMakeLists.txt # CMake脚本文件
--main.cpp # 程序入口
Tips
头文件 和库文件 下载后,要解压,然后放到 ./external/wxWidgets 下(你也可以修改CMake配置),结构如上
项目代码
cmake_minimum_required(VERSION 3.17)
project(wx-demo
VERSION 0.1
DESCRIPTION wxWidgets样例
LANGUAGES CXX
)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(EXTERNAL_DIR ${PROJECT_SOURCE_DIR}/external)
include_directories(./include)
include_directories(${EXTERNAL_DIR}/wxWidgets/include)
aux_source_directory(./src SRC)
add_executable(${PROJECT_NAME} main.cpp ${SRC})
# wxWidgets
# 配置wxWidgets库地址,用于find_package
set(wxWidgets_ROOT_DIR ${EXTERNAL_DIR}/wxWidgets)
set(wxWidgets_LIB_DIR ${EXTERNAL_DIR}/wxWidgets/lib/gcc810_x64_dll)
find_package(wxWidgets REQUIRED COMPONENTS net core base)
if(wxWidgets_USE_FILE)
include(${wxWidgets_USE_FILE})
endif()
target_link_libraries(${PROJECT_NAME} ${wxWidgets_LIBRARIES})
# include "wx/wxprec.h"
# ifndef WX_PRECOMP
# include "wx/wx.h"
# endif
class MyFrame : public wxFrame {
public :
explicit MyFrame ( const wxString & title)
: wxFrame ( nullptr , wxID_ANY, title, wxDefaultPosition, wxSize ( 250 , 150 ) ) {
auto * panel = new wxPanel ( this , wxID_ANY) ;
auto * button = new wxButton ( panel, wxID_ANY, wxT ( "Click me!" ) ,
wxPoint ( 60 , 40 ) , wxSize ( 100 , 30 ) ) ;
button-> Bind ( wxEVT_BUTTON, & MyFrame:: OnButtonClicked, this ) ;
}
private :
void OnButtonClicked ( wxCommandEvent & event) {
wxUnusedVar ( event) ;
wxMessageBox ( wxT ( "Hello, wxWidgets!" ) , wxT ( "Hello" ) , wxOK | wxICON_INFORMATION) ;
}
wxDECLARE_EVENT_TABLE ( ) ;
} ;
wxBEGIN_EVENT_TABLE ( MyFrame, wxFrame)
EVT_BUTTON ( wxID_ANY, MyFrame:: OnButtonClicked)
wxEND_EVENT_TABLE ( )
class MyApp : public wxApp
{
public :
virtual bool OnInit ( ) {
auto * frame = new MyFrame ( wxT ( "Hello wxWidgets!" ) ) ;
frame-> Show ( true ) ;
return true ;
}
} ;
wxIMPLEMENT_APP ( MyApp) ;
CMake构建
进入项目根目录 生成构建文件$ cmake -G "MinGW Makefiles" -B build
构建$ cmake --build build
最后会在 ./build 目录下生成可执行文件 wx-demo.exe 界面样例如下
Tips
直接运行wx-demo.exe ,会报找不到*.dll动态库的问题,可以暂时将wx-demo.exe 放到 ./external/wxWidgets/lib/gcc810_x64_dll 下运行,也可以使用CMake命令拷贝库文件到exe程序旁
参考
https://docs.wxwidgets.org/stable/overview_install.html Using CMake with your applications 【wxWidgets 教程】安装、配置、HelloWorld篇(一)-CSDN博客