本文目录:

关于我为什么咕了这么久

这么久没更新了,主要是在做点小项目(

最近又想写个小工具玩玩,C++下的跨平台GUI库最为人所知的就是Qt,但Qt在国内都快成开源刺客了,风评很差,所以我看了下其他选择,我有一位朋友在用wxWidgets库写软件,我就跑去玩了下,还挺不错的,主要是能自绘控件

虽然官网有预编译包,但是我不推荐去下载,这东西编译后会在编译出的exe目录下带一大堆wxWidgets动态库文件,在其他电脑上就算和exe在同个目录下,运行也会报错缺少dll,只适合在配置了wxwidgets环境的电脑上玩

这篇文章就一步步教你如何在win上搭建这个库的静态开发环境,静态编译不需要那一大堆动态库了,只有exe单文件(helloworld编译出来是4MB大小),希望可以帮助你入门这个库(

第一步:下载源码

首先去官网下载源码
https://www.wxwidgets.org/downloads/

注意哦,不要下那个 "Windows Binaries"(预编译库),我们要下 Source Code
我选的是 Windows ZIP,解压到哪里都行,但路径尽量别带中文和空格
2026-02-09T04:40:40.png

我就直接丢在 G:\Documents\wxWidgetsBuild

第二步:编译 wxWidgets 静态库

解压完后,进入 build\msw 目录
因为我用的是VS2022,所以打开 wx_vc17.sln 这个解决方案文件(选vc16也行)
2026-02-09T04:44:50.png

打开后,在顶部的工具栏里,把配置改成 x64 Release(要编译静态库得选这个)
2026-02-09T04:45:39.png

wxWidgets 的 Release 配置默认就是编译静态库的,不需要额外找选项,编译出来就是 .lib,这点挺好的

选好后,在工具栏栏点击 生成 -> 生成解决方案
2026-02-09T04:50:23.png
这个过程会比较慢,可能需要5-15分钟,因为它要编译整个GUI框架
2026-02-09T05:28:50.png

编译完成后,lib\vc_x64_lib目录下就是静态库的文件了
如果看到一堆.lib文件,而且没有dll文件,那就说明编译成功了

第三步:创建 CMake 项目

库准备好了,接下来开始写wxwidgets的helloworld
打开 VS2022,创建新项目
再选择 CMake 项目
2026-02-09T04:56:07.png

选这个也方便后面的跨平台,我这里就简单给个在Linux上用g++编译的命令:

g++ main.cpp `wx-config --cxxflags` -o main

给项目起个名字,我这里取wx
2026-02-09T04:59:45.png

第四步:配置 CMakeLists.txt

项目建好后,VS会生成一个默认的 CMakeLists.txt,我们需要修改它,让它能找到我们刚才编译好的 wxWidgets 库
这是我的目录结构:
2026-02-09T05:02:05.png

CMakeLists.txt 改成这样:

cmake_minimum_required(VERSION 3.15)
project(wx)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)

# 定义 wxWidgets 的根目录 (这里改成你自己的路径,就是你解压wxwidgets源代码的位置)
set(wxWidgets_ROOT_DIR "G:/Documents/wxWidgetsBuild")

# 指定库文件目录 (指向编译好后的静态库)
set(wxWidgets_LIB_DIR "${wxWidgets_ROOT_DIR}/lib/vc_x64_lib")

# 开启静态链接模式
set(wxWidgets_USE_STATIC ON)
# 指定配置为 Unicode Release (mswu)
set(wxWidgets_CONFIGURATION mswu) 

# 查找组件 (core base 是必须的)
find_package(wxWidgets REQUIRED COMPONENTS core base)

# 包含 wx 的配置
include(${wxWidgets_USE_FILE})

# 添加可执行文件 (记得加上 WIN32,不然会有个黑框框)
add_executable(wx WIN32 wx.cpp)

# 链接库
target_link_libraries(wx ${wxWidgets_LIBRARIES})

这里最关键的就是 wxWidgets_ROOT_DIRwxWidgets_LIB_DIR 别填错了

第五步:编写Hello World

配置完了,写个helloworld试试
这里我直接用wxWidgets官方提供的HelloWorld示例代码(稍微精简了一下),贴到 wx.cpp 里:

// wxWidgets "Hello World" Program
// For compilers that support precompilation, includes "wx/wx.h".
#include <wx/wxprec.h>

#ifndef WX_PRECOMP
    #include <wx/wx.h>
#endif

// 定义应用程序类
class MyApp : public wxApp
{
public:
    virtual bool OnInit();
};

// 定义主窗口类
class MyFrame : public wxFrame
{
public:
    MyFrame();

private:
    void OnHello(wxCommandEvent& event);
    void OnExit(wxCommandEvent& event);
    void OnAbout(wxCommandEvent& event);
};

// 告诉 wxWidgets 这是主程序入口
wxIMPLEMENT_APP(MyApp);

// 应用程序初始化
bool MyApp::OnInit()
{
    MyFrame *frame = new MyFrame();
    frame->Show(true);
    return true;
}

// 主窗口构造函数
MyFrame::MyFrame()
    : wxFrame(NULL, wxID_ANY, "Hello World from Nekopara Dev")
{
    wxMenu *menuFile = new wxMenu;
    menuFile->Append(1, "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, 1);
    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!");
}

第六步:运行测试

好了,代码写完了,准备点击运行
等一下,这里有一个坑

因为我们在 CMakeLists.txt 里手动指定了 set(wxWidgets_CONFIGURATION mswu),这代表我们要链接的是 Release 版 的库

但是,VS的CMake项目默认会给你选成Debug配置
如果你在x64 Debug模式下编译,就会出现一大堆不明报错,像这样:
2026-02-09T05:22:43.png

要在顶部的下拉菜单中,将配置切换为x64 Release
2026-02-09T05:23:58.png

切换好之后,点击工具栏的“生成“ -> “全部生成“
2026-02-09T05:38:18.png
生成的wx.exe已经在out/build/x64-release/wx目录下了
2026-02-09T05:37:30.png
点开exe,窗口弹出来了(虽然界面很简陋),但它是静态链接的,直接把exe给别人也能直接运行
2026-02-09T05:37:58.png

结尾

好了,本篇教程就到这里,希望能帮助到你入门这个库