我们正在尝试包含 wxWidgets 并使其在我们的项目中运行。 我们使用 CMake 来编译我们的库并将其包含在 msys2 中。我们使用 CLion 作为 IDE。经过几天的测试,我们仍然无法让它运行。有太多不同的错误,无法全部发布。 我想我们已经尝试了所有可以做的事情,阅读了所有可以阅读的内容,但仍然行不通。
我们还尝试安装整个 wxWidget.zip 文件夹并通过路径实现所有内容,但仍然一无所获。
有一些关于此问题的帖子,但似乎没有任何作用。
请问有人遇到同样的问题并解决了吗?是否有正确实现一切的分步指南?
提前致谢!
最佳答案
由于当前 msys2 版本的 wxwidgets 无法正常工作(FindCMake 文件无法正常工作 + 包含的文件夹名称与 wxWidgets 主页上的文档中的文件夹名称不同),我建议采用以下解决方法:
- Download wxWidgets并将其解压到您选择的目录中。
- 运行 CLion(并按以下方式构建 wxWidgets):
- 关闭所有打开的项目并
从源导入项目
。 - 选择您将 wxWidgets 解压到的目录。
- 选择
使用现有的 CMakeLists.txt
- CMake 完成加载后 - 构建项目 (Ctrl + F9)。我建议使用发布模式。
- 关闭所有打开的项目并
- 在 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/复制到还包括文件夹。
- 将所有
- 编辑项目的 CMakeLists.txt:
- 向您的
include_directories
添加 wxWidgetsinclude
文件夹的路径 - 向您的
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/