使用 cmake 将随 msys 2 安装的 wxWidgets (3.1.1) 包含到我们的项目中
Include wxWidgets (3.1.1) installed with msys 2 into our project, using cmake
我们正在尝试在我们的项目中包含并制作 wxWidgets 运行。
我们正在使用 CMake 编译并将我们的库包含在 msys2 中。我们将 CLion 用作 IDE。经过几天的测试,我们仍然无法做到运行。 post 所有错误都有太多不同的错误。
我想我们已经尝试了所有你能做的事情,阅读了所有你能读到的东西,但它仍然行不通。
我们也尝试安装整个 wxWidget.zip 文件夹并通过路径实现所有内容,但仍然没有。
有一些关于这个问题的 post,但似乎没有任何效果。
我的问题是,有没有人遇到同样的问题并解决了这个问题?是否有正确实施所有内容的分步指南?
提前致谢!
由于当前的 msys2 版本的 wxwidgets 无法正常工作(FindCMake 文件无法正常工作+包含的文件夹名称与 wxWidgets 主页上的文档中的文件夹名称不同),我建议采用以下解决方法:
- Download wxWidgets 并将其解压到您选择的目录中。
- 运行 CLion(并按以下方式构建 wxWidgets):
- 关闭任何打开的项目并执行
Import Projetct from Sources
。
- Select wxWidgets 解压到的目录。
- Select
Use existing CMakeLists.txt
- CMake 完成加载后 - 构建项目 (Ctrl + F9)。我建议使用 release 模式。
- 在 CLion 中完成构建 wxWidgets 后,有一个名为 'cmake-build-release' 或 'cmake-build-debug' 的新文件夹。如果您想将内置的 wxWidgets 集成到您的项目中,我建议:
- 将 /lib/gcc_dll/ 中的所有
.a
文件复制到新的项目文件夹,
- 将所有
.dll
文件从 /lib/gcc_dll/ 复制到您的项目构建文件夹
- 将 include 文件夹从原始 wxWidgets 存档复制到您的项目,并且 在任何情况下 将
setup.h
从 /lib/gcc_dll/mswud/wx/ 复制到包含文件夹也是如此。
- 编辑项目的 CMakeLists.txt:
- 在您的
include_directories
添加 wxWidgets include
文件夹的路径
- 在您的
target_link_libraries
中添加 每个 .a
文件的路径。
在我的案例中,第 4 点导致以下几行使其变得清晰 crystal:
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 库,请改用它!
核心问题是pacman在msys2中安装的wx库是从“make”构建的,它是一个类似shell的unix,与原生windows mingw相比具有不同的文件夹结构构建 wx.
在 Msys2 下,要从 cmake 生成 mingw 样式的 makefile,您必须破解 cmake 文件:\mingw64\share\cmake-3.17\Modules\FindwxWidgets.cmake
详情如下:
Re: Using wxWidgets with Win10, msys2, mingw64 and CLion
之后就可以正确使用mingw风格的makefile了
编辑 2022-04-30,msys2 的 cmake 现在可以正确找到 wx 库,请看我的教程:
https://github.com/msys2/MINGW-packages/issues/11585#issuecomment-1113904778
我们正在尝试在我们的项目中包含并制作 wxWidgets 运行。 我们正在使用 CMake 编译并将我们的库包含在 msys2 中。我们将 CLion 用作 IDE。经过几天的测试,我们仍然无法做到运行。 post 所有错误都有太多不同的错误。 我想我们已经尝试了所有你能做的事情,阅读了所有你能读到的东西,但它仍然行不通。
我们也尝试安装整个 wxWidget.zip 文件夹并通过路径实现所有内容,但仍然没有。
有一些关于这个问题的 post,但似乎没有任何效果。
我的问题是,有没有人遇到同样的问题并解决了这个问题?是否有正确实施所有内容的分步指南?
提前致谢!
由于当前的 msys2 版本的 wxwidgets 无法正常工作(FindCMake 文件无法正常工作+包含的文件夹名称与 wxWidgets 主页上的文档中的文件夹名称不同),我建议采用以下解决方法:
- Download wxWidgets 并将其解压到您选择的目录中。
- 运行 CLion(并按以下方式构建 wxWidgets):
- 关闭任何打开的项目并执行
Import Projetct from Sources
。 - Select wxWidgets 解压到的目录。
- Select
Use existing CMakeLists.txt
- CMake 完成加载后 - 构建项目 (Ctrl + F9)。我建议使用 release 模式。
- 关闭任何打开的项目并执行
- 在 CLion 中完成构建 wxWidgets 后,有一个名为 'cmake-build-release' 或 'cmake-build-debug' 的新文件夹。如果您想将内置的 wxWidgets 集成到您的项目中,我建议:
- 将 /lib/gcc_dll/ 中的所有
.a
文件复制到新的项目文件夹, - 将所有
.dll
文件从 /lib/gcc_dll/ 复制到您的项目构建文件夹 - 将 include 文件夹从原始 wxWidgets 存档复制到您的项目,并且 在任何情况下 将
setup.h
从 /lib/gcc_dll/mswud/wx/ 复制到包含文件夹也是如此。
- 将 /lib/gcc_dll/ 中的所有
- 编辑项目的 CMakeLists.txt:
- 在您的
include_directories
添加 wxWidgetsinclude
文件夹的路径 - 在您的
target_link_libraries
中添加 每个.a
文件的路径。
- 在您的
在我的案例中,第 4 点导致以下几行使其变得清晰 crystal:
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 库,请改用它!
核心问题是pacman在msys2中安装的wx库是从“make”构建的,它是一个类似shell的unix,与原生windows mingw相比具有不同的文件夹结构构建 wx.
在 Msys2 下,要从 cmake 生成 mingw 样式的 makefile,您必须破解 cmake 文件:
详情如下:
Re: Using wxWidgets with Win10, msys2, mingw64 and CLion
之后就可以正确使用mingw风格的makefile了
编辑 2022-04-30,msys2 的 cmake 现在可以正确找到 wx 库,请看我的教程:
https://github.com/msys2/MINGW-packages/issues/11585#issuecomment-1113904778