wx/wx.h找不到:wxWidgets编译安装后自定义代码编译及CMake配置求助
wxWidgets编译配置问题解答
问题描述
已通过源码编译并全局安装带GTK配置的wxWidgets,执行的编译安装命令如下:
mkdir gtk-build cd gtk-build ../configure --with-gtk make sudo su make install ldconfig exit cd samples make
samples目录下的可执行文件运行正常,/usr/local/include中存在wx目录及wx.h文件,但用g++编译自定义代码时出现错误:
hello.cpp:1:9: fatal error: wx/wx.h: No such file or directory 1 | #include<wx/wx.h>
需解决两个问题:
- g++编译自定义代码时,如何正确配置wxWidgets链接?
- 使用CMakeLists.txt构建代码时,除
add_executable外还需哪些配置?
一、g++编译的正确命令
是的,编译wxWidgets程序必须指定头文件路径和链接对应库文件,推荐用wxWidgets自带的wx-config工具自动获取参数,避免手动配置出错:
g++ hello.cpp -o hello `wx-config --cxxflags --libs`
wx-config --cxxflags:自动输出编译所需的头文件路径、宏定义等参数wx-config --libs:自动输出链接所需的库文件及路径参数
如果wx-config不在系统PATH中,可使用绝对路径(如/usr/local/bin/wx-config)。
二、CMakeLists.txt的正确配置
wxWidgets提供官方CMake模块支持,无需手动指定头文件和库路径,修改后的配置如下:
cmake_minimum_required(VERSION 3.10) project(Basic) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED True) # 查找wxWidgets基础组件(core和base是运行必备) find_package(wxWidgets REQUIRED COMPONENTS core base) # 引入wxWidgets的CMake配置脚本 include(${wxWidgets_USE_FILE}) add_executable(base hello.cpp) # 链接wxWidgets库 target_link_libraries(base ${wxWidgets_LIBRARIES})
执行源码外构建的命令不变:
mkdir build && cd build cmake .. cmake --build .
三、示例代码中的错误修正
除配置问题外,你的代码本身存在拼写和大小写不一致问题,必须修正才能编译通过:
- 类名大小写不匹配:
myApp定义但使用wxIMPLEMENT_APP(MyApp),MyAPP::OnInit应改为MyApp::OnInit(建议统一类名为MyApp) - 拼写错误:
xwMenu *menuHelp = new wxMenu;中的xwMenu应为wxMenu - 参数传递错误:
void myFrame::OnHello(wxCommandEvent event)应改为void MyFrame::OnHello(wxCommandEvent& event)(引用传递,且类名需匹配MyFrame) - 类名统一:所有
myFrame需改为MyFrame,保持类名大小写一致
修正后的核心代码片段示例:
#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); }; bool MyApp::OnInit(){ MyFrame *frame = new MyFrame(); frame->Show(); return true; }
内容的提问来源于stack exchange,提问作者Dushyant Patil
相关产品推荐
相关产品推荐

