如何在CMake项目中包含wxWidgets标头

sxpgvts3  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(180)

我尝试使用cmake运行wxWidget示例,但无法在我的C++项目(CMakeLists.txt)中包含wxWidget的标头。

g++ main.cpp `wx-config --cppflags --libs` -o wxTest

程序工作并显示窗口。但是我如何使用CMakeLists.txt文件来做到这一点。例如,通常我创建一个名为external-libs的单独文件夹,然后在其中创建一个名为 whateverlibraryname 的文件夹,然后在其中创建一个头文件以及src和lib文件夹,我在其中放置头文件,任何源文件和.so文件。但在wxWidgets的情况下,我有几个静态库文件,并且在头文件中有许多单独的文件夹,我不知道如何将它们全部包含在内。它们会产生错误:

fatal error: wx/wx.h: No such file or directory
 #include <wx/wx.h>

我使用的是Ubuntu 18.04,我的项目目录结构如下:

├── build
└── source
    ├── CMakeLists.txt
    ├── external-libraries
    │   └── wxWidgets
    │       ├── headers
    │       │   ├── msvc
    │       │   │   └── wx
    │       │   └── wx
    │       │       ├── android
    │       │       ├── aui
    │       │       ├── dfb
    │       │       ├── generic
    │       │       ├── gtk
    │       │       ├── gtk1
    │       │       ├── html
    │       │       ├── meta
    │       │       ├── motif
    │       │       ├── msw
    │       │       ├── osx
    │       │       ├── persist
    │       │       ├── private
    │       │       ├── propgrid
    │       │       ├── protocol
    │       │       ├── qt
    │       │       ├── ribbon
    │       │       ├── richtext
    │       │       ├── stc
    │       │       ├── univ
    │       │       ├── unix
    │       │       ├── x11
    │       │       ├── xml
    │       │       └── xrc
    │       ├── lib   
                ├── libwx_baseu-3.1.a
    │       │   ├── libwx_baseu_net-3.1.a
    │       │   ├── libwx_baseu_xml-3.1.a
    │       │   ├── libwx_gtk3u_adv-3.1.a
    │       │   ├── libwx_gtk3u_aui-3.1.a
    │       │   ├── libwx_gtk3u_core-3.1.a
    │       │   ├── libwx_gtk3u_gl-3.1.a
    │       │   ├── libwx_gtk3u_html-3.1.a
    │       │   ├── libwx_gtk3u_propgrid-3.1.a
    │       │   ├── libwx_gtk3u_qa-3.1.a
    │       │   ├── libwx_gtk3u_ribbon-3.1.a
    │       │   ├── libwx_gtk3u_richtext-3.1.a
    │       │   ├── libwx_gtk3u_stc-3.1.a
    │       │   ├── libwx_gtk3u_xrc-3.1.a
    │       │   ├── libwxjpeg-3.1.a
    │       │   ├── libwxregexu-3.1.a
    │       │   ├── libwxscintilla-3.1.a
    │       │   └── libwxtiff-3.1.a
    │       └── src
    ├── main.cpp

Main.cpp顶部有#include<wx/wx.h>。我使用VSCode,当我使用g++运行程序时(上面描述的命令)当我用CMake运行同一个程序时,它工作但不工作。这就是如何包括头文件夹和使用包含所有wxWidgets头文件和库文件的lib文件夹。CMakeList的内容应该是什么?txt文件和什么是其他必要的事情,我必须做的,使这项工作。

7gcisfzg

7gcisfzg1#

CMake有wxWidgets的第一方支持,这里有一个例子:

cmake_minimum_required(VERSION 3.20)
project(wxTest)

find_package(wxWidgets REQUIRED gl core base OPTIONAL_COMPONENTS net)
include(${wxWidgets_USE_FILE})

add_executable(wxTest main.cpp)
target_link_libraries(wxTest PRIVATE ${wxWidgets_LIBRARIES})

不幸的是,这个模块是如此的陈旧,上面的代码最好使用导入的目标,而不需要用include(${wxWidgets_USE_FILE})来做这个奇怪的舞蹈,但是唉,至少它是有文档的。
你可以设置各种变量来帮助它找到你的wxWidgets安装,更多细节请参见文档:https://cmake.org/cmake/help/latest/module/FindwxWidgets.html

相关问题