cmake - 使用 cmake 将随 msys 2 安装的 wxWidgets (3.1.1) 包含到我们的项目中

标签 cmake wxwidgets clion msys2

我们正在尝试包含 wxWidgets 并使其在我们的项目中运行。 我们使用 CMake 来编译我们的库并将其包含在 msys2 中。我们使用 CLion 作为 IDE。经过几天的测试,我们仍然无法让它运行。有太多不同的错误,无法全部发布。 我想我们已经尝试了所有可以做的事情,阅读了所有可以阅读的内容,但仍然行不通。

我们还尝试安装整个 wxWidget.zip 文件夹并通过路径实现所有内容,但仍然一无所获。

有一些关于此问题的帖子,但似乎没有任何作用。

请问有人遇到同样的问题并解决了吗?是否有正确实现一切的分步指南?

提前致谢!

最佳答案

由于当前 msys2 版本的 wxwidgets 无法正常工作(FindCMake 文件无法正常工作 + 包含的文件夹名称与 wxWidgets 主页上的文档中的文件夹名称不同),我建议采用以下解决方法:

  1. Download wxWidgets并将其解压到您选择的目录中。
  2. 运行 CLion(并按以下方式构建 wxWidgets):
    • 关闭所有打开的项目并从源导入项目
    • 选择您将 wxWidgets 解压到的目录。
    • 选择使用现有的 CMakeLists.txt
    • CMake 完成加载后 - 构建项目 (Ctrl + F9)。我建议使用发布模式。
  3. 在 CLion 中完成构建 wxWidgets 后,会出现一个名为“cmake-build-release”或“cmake-build-debug”的新文件夹。如果您想将内置的 wxWidgets 集成到您的项目中,我建议:
    • 将所有 .a 文件从/lib/gcc_dll/复制到新的项目文件夹,
    • 将/lib/gcc_dll/中的所有 .dll 文件复制到项目构建文件夹
    • 将包含文件夹从原始 wxWidgets 存档复制到您的项目,并无论如何setup.h 从/lib/gcc_dll/mswud/wx/复制到还包括文件夹。
  4. 编辑项目的 CMakeLists.txt:
    • 向您的 include_directories 添加 wxWidgets include 文件夹的路径
    • 向您的target_link_libraries添加每个.a文件的路径。

在我的例子中,第 4 点导致了以下几行内容,使其一目了然:

include_directories(
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_headers/include
        )

target_link_libraries(example_project
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxbase31u.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxbase31u_net.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxbase31u_xml.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxexpat.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxjpeg.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxmsw31u_adv.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxmsw31u_aui.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxmsw31u_core.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxmsw31u_gl.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxmsw31u_html.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxmsw31u_media.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxmsw31u_propgrid.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxmsw31u_qa.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxmsw31u_ribbon.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxmsw31u_richtext.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxmsw31u_stc.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxmsw31u_webview.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxmsw31u_xrc.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxpng.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxregexu.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxscintilla.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxtiff.a
        ${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_build/libwxzlib.a
)

免责声明:

您应该知道,以这种方式包含库被认为是不好的做法,一旦 MSYS2 提供了带有工作 find_package 文件的 wxWidgets 库,就可以使用它!

关于cmake - 使用 cmake 将随 msys 2 安装的 wxWidgets (3.1.1) 包含到我们的项目中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49920963/

相关文章:

c++ - 二元运算符 "<<"不能应用于类型 "wostream"和 "string"的表达式

C : Value escapes local scope?

python - 如何在 wxPython for windows 中的 saveFileDialog.SetFilename 中设置默认文件名?

c++ - 如何在 Linux 中编译 Box2D?

c++ - 为 arm64 iPhone 编译 xcode 5 失败

python - 找不到 PythonLibs(要求 3.3 但我有 2.7.6)

cross-platform - wxNotebook 关闭按钮?

haskell - react 香蕉 : Alternate buttons events

intellij-idea - 如何为 IntelliJ 中的所有 Rust/Cargo 测试设置 --nocapture 标志?

svn - 使用 CMake 安装某些文件