使用 mingw64 和 vscode 设置 wxWidgets

问题描述 投票:0回答:1

我已经尝试了从 wxWiki 到 chatGPT 的所有方法,但没有任何方法可以解决我的问题,请注意,我不需要替代解决方案,并且想了解我在此实现中缺少的内容。

我遵循的步骤,

  • 第 1 步:使用 mingw-builds-binaries 在我的 Windows 11 x64 处理器上安装 mingw64。我选择了 发布 13.2.0-rt_v11-rev1

    x86_64-13.2.0-release-win32-seh-ucrt-rt_v11-rev1.7z
    版本。

  • Step2: 创建项目文件夹

    myWxProject
    [%project%]
    ,
    %project%/libs/wxWidgets
    [%wxWidgets%]
    .

  • 第 3 步:从 Windows 7z v3.235 下载 wxWidgets 源文件。将文件解压到

    %wxWidgets%

  • 第 4 步:使用 gcc make 构建文件,进入

    %wxWidgets%/build/msw/
    并运行命令
    mingw32-make -f makefile.gcc BUILD=release SHARED=0 UNICODE=1
    请注意,即使下一个选项
    BUILD=debug
    对 include 进行了必要的更改,仍然会给出错误。

  • 第 5 步:添加 VSCode 配置

    c_cpp_properties.json
    %project%/.vscode/

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}\\libs\\wxWidgets\\include",
                "${workspaceFolder}\\libs\\wxWidgets\\lib\\gcc_lib\\mswu"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "__WXMSW"
            ],
            "intelliSenseMode": "gcc-x64",
            "compilerPath": "C:\\mingw64\\bin\\g++.exe",
            "cStandard": "c11",
            "cppStandard": "c++17"
        }
    ],
    "version": 4
}

tasks.json
%project/.vscode/%

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "cpp-build-debug",
            "type": "shell",
            "command": "g++",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${workspaceFolder}\\cpp-build-debug\\${fileBasenameNoExtension}.exe",
                "-I",
                "${workspaceFolder}\\libs/wxWidgets\\include",
                "${workspaceFolder}\\libs/wxWidgets\\lib\\gcc_lib\\mswu",
                "-L",
                "${workspaceFolder}\\libs\\wxWidgets\\lib\\gcc_lib",
                "-lwxbase32u",
                "-lwxmsw32u_core",
                "-lwxmsw32u_adv"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": [
                "$gcc"
            ]
        }
    ]
}
// 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!");
}
  • 第 7 步:最后运行
    cpp-build-debug
    任务。

错误

In file included from %project%\libs/wxWidgets\include/wx/defs.h:45,
                 from %project%\libs/wxWidgets\include/wx/wx.h:14,
                 from %project%\helloWorld.cpp:2:
%project%\libs/wxWidgets\include/wx/platform.h:159:10: fatal error: wx/setup.h: No such file or directory
  159 | #include "wx/setup.h"
      |          ^~~~~~~~~~~~
compilation terminated.

我确信的事情: 我可以确保目录中有一个名为 setup.h 的文件

%wxWidgets%/lib/gcc_lib/mswu/wx/
但即使该文件夹位于 include 中也找不到它。我注意到一些奇怪的事情,源代码的提取里面有一个文件夹,其中包含
%wxWidgets%/include/msvc
,其中还包含
wx
文件夹和
setup.h
,如果我从这个 wiki 理解正确的话,这个文件是针对视觉工作室的构建设置,因此我不会使用它。在过去的几天里,我确实尝试了我想到的一切,但我一生都无法弄清楚为什么它会给我这个
setup.h
错误。

我希望这些信息足够了。如果您想要我的系统中的确切文件,我可以提供我的项目的整个构建文件夹,但由于它很大,我现在没有包含它。

[编辑] 附加信息:

从示例编译

minimal
程序时,我遇到了同样的问题。这是在导航到最小示例文件夹后再次由 gcc-make
mingw32-make -f makefile.gcc
构建的。

c++ build static-libraries wxwidgets
1个回答
0
投票

我可以在你的配置文件中看到 2 个错误(不确定它会解决你的问题,但谁知道......):

"defines": [
                "_DEBUG",
                "UNICODE",
                "__WXMSW"
            ],...

应该是:

"defines": [
                "_DEBUG",
                "UNICODE",
                "__WXMSW__"
            ],

如果您使用的是库的调试版本,则包含路径不是:

"${workspaceFolder}\\libs\\wxWidgets\\lib\\gcc_lib\\mswu"

但是

"${workspaceFolder}\\libs\\wxWidgets\\lib\\gcc_lib\\mswud"
© www.soinside.com 2019 - 2024. All rights reserved.