CMake创建wxWidgets桌面应用
2023-12-15 13:47:05
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,下载头文件和库文件
- 头文件
- Header Files
- 库文件(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配置),结构如上
项目代码
- CMakeLists.txt
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})
- main.cpp
#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); // NOLINT
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://blog.csdn.net/alionsss/article/details/135014214
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!