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/
    • 点击下载按钮CMake创建wxWidgets桌面应用_第1张图片
    • 找到 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              # 程序入口

CMake创建wxWidgets桌面应用_第2张图片

  • 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构建

  1. 进入项目根目录
  2. 生成构建文件$ cmake -G "MinGW Makefiles" -B build
  3. 构建$ cmake --build build
  4. 最后会在 ./build 目录下生成可执行文件 wx-demo.exe
  5. 界面样例如下

CMake创建wxWidgets桌面应用_第3张图片

  • 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博客

你可能感兴趣的:(C++,C++,CMake,wxWidgets)