CMake创建wxWidgets桌面应用

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/
    • 点击下载按钮截图_17013379106103.png
    • 找到 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              # 程序入口

截图_17013397502684.png

  • 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(官方代码)
// Start of wxWidgets "Hello World" Program
#include <wx/wx.h>
 
class MyApp : public wxApp {
public:
    bool OnInit() override;
};
 
wxIMPLEMENT_APP(MyApp);
 
class MyFrame : public wxFrame {
public:
    MyFrame();
 
private:
    void OnHello(wxCommandEvent& event);
    void OnExit(wxCommandEvent& event);
    void OnAbout(wxCommandEvent& event);
};
 
enum {
    ID_Hello = 1
};
 
bool MyApp::OnInit() {
    MyFrame *frame = new MyFrame();
    frame->Show(true);
    return true;
}
 
MyFrame::MyFrame() : wxFrame(nullptr, wxID_ANY, "Hello World") {
    wxMenu *menuFile = new wxMenu;
    menuFile->Append(ID_Hello, "&Hello...\tCtrl-H", "Help string shown in status bar for this menu item");
    menuFile->AppendSeparator();
    menuFile->Append(wxID_EXIT);
 
    wxMenu *menuHelp = new wxMenu;
    menuHelp->Append(wxID_ABOUT);
 
    wxMenuBar *menuBar = new wxMenuBar;
    menuBar->Append(menuFile, "&File");
    menuBar->Append(menuHelp, "&Help");
 
    SetMenuBar( menuBar );
 
    CreateStatusBar();
    SetStatusText("Welcome to wxWidgets!");
 
    Bind(wxEVT_MENU, &MyFrame::OnHello, this, ID_Hello);
    Bind(wxEVT_MENU, &MyFrame::OnAbout, this, wxID_ABOUT);
    Bind(wxEVT_MENU, &MyFrame::OnExit, this, wxID_EXIT);
}
 
void MyFrame::OnExit(wxCommandEvent& event) {
    Close(true);
}
 
void MyFrame::OnAbout(wxCommandEvent& event) {
    wxMessageBox("This is a wxWidgets Hello World example", "About Hello World", wxOK | wxICON_INFORMATION);
}
 
void MyFrame::OnHello(wxCommandEvent& event) {
    wxLogMessage("Hello world from wxWidgets!");
}

CMake构建

  1. 进入项目根目录
  2. 生成构建文件$ cmake -G "MinGW Makefiles" -B build
  3. 构建$ cmake --build build
  4. 最后会在 ./build 目录下生成可执行文件 wx-demo.exe
  5. 界面样例如下
    程序截图
  • Tips
    • 直接运行wx-demo.exe,会报找不到*.dll动态库的问题,可以暂时将wx-demo.exe放到 ./external/wxWidgets/lib/gcc810_x64_dll 下运行,也可以使用CMake命令拷贝库文件到exe程序旁

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值