使用cmake将与MSYS2一起安装的wxWidgets(3.1.1)包含到我们的项目中
我们正试图在我们的项目中包含并运行wxWidgets。 我们正在使用CMake编译并将我们的库包含在msys2中。我们使用CLion作为IDE。经过几天的测试,我们仍然无法让它运行。有太多不同的错误来发布它们。 我想我们已经尝试了你能做的一切,读了你能读的所有东西,但仍然不起作用 我们还尝试安装整个wxWidget.zip文件夹,并通过路径实现所有内容,但仍然没有实现 有一些关于这个问题的帖子,但似乎没有任何效果 我的问题是,有没有人遇到同样的问题并解决了这个问题?是否有一个正确实施每件事的分步指南使用cmake将与MSYS2一起安装的wxWidgets(3.1.1)包含到我们的项目中,cmake,wxwidgets,clion,msys2,Cmake,Wxwidgets,Clion,Msys2,我们正试图在我们的项目中包含并运行wxWidgets。 我们正在使用CMake编译并将我们的库包含在msys2中。我们使用CLion作为IDE。经过几天的测试,我们仍然无法让它运行。有太多不同的错误来发布它们。 我想我们已经尝试了你能做的一切,读了你能读的所有东西,但仍然不起作用 我们还尝试安装整个wxWidget.zip文件夹,并通过路径实现所有内容,但仍然没有实现 有一些关于这个问题的帖子,但似乎没有任何效果 我的问题是,有没有人遇到同样的问题并解决了这个问题?是否有一个正确实施每件事的分步
提前谢谢 由于wxwidgets的当前msys2版本无法正常工作(FindMake文件无法正常工作+包含的文件夹名称与wxwidgets主页上的文档不同),我建议采取以下解决方法:
- 关闭任何打开的项目,然后执行从源文件导入项目的操作
- 选择将wxWidgets解压缩到的目录
- 选择
使用现有的CMakeLists.txt
- CMake完成加载后-构建项目(Ctrl+F9)。我建议使用发布模式
- 将所有
-文件从/lib/gcc\u dll/复制到新的项目文件夹.a
- 将所有
文件从/lib/gcc\u dll/复制到项目生成文件夹中.dll
- 将include文件夹从原始wxWidgets存档复制到您的项目中,在任何情况下将
从/lib/gcc_dll/mswud/wx/复制到include文件夹中setup.h
- 在
添加wxWidgetsinclude\u目录中
文件夹的路径include
- 在
添加每个目标链接库中
文件的路径.a
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/cpp/libs/wx_headers/include
)
及
免责声明:
您应该知道,以这种方式包含库被认为是不好的做法,一旦MSYS2为wxWidgets库提供了一个工作的
find_包
-文件,就使用它吧 核心问题是pacman在msys2中安装的wx库是从“make”构建的,这是一个类似unix的shell,与本机windows mingw build wx相比,它具有不同的文件夹结构
在Msys2下,要从cmake生成mingw样式的makefile,您必须破解cmake文件:\mingw64\share\cmake-3.17\Modules\FindwxWidgets.cmake
详情如下:
之后,您可以正确使用mingw样式的makefile。显示第一个错误。嘿,这是我从msys2实现find_包(需要wxWidget)时得到的结果。无法找到由“wxWidget”提供的具有以下任何名称的包配置文件:wxWidgetConfig.cmake或找不到wxWidgets(缺少:wxWidgets\u库wxWidgets\u INCLUDE\u目录)当我包含wxwidget文件夹的路径时,wxwidget-config.cmakeI在这里看不到任何错误消息:C:/Users/usr/Downloads/wxWidgets-3.1.1/include其编译,但我得到一些其他错误,如:C:/msys64/mingw64/bin/./lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../../../../x86_64-w64-mingw32/bin/ld.exe:找不到-lwxWidgets或错误“必须定义wxUSE_ACTIVEX。"因此编译器无法找到库。我不确定它在Windows下如何工作,但我想所有必要的库都需要在PATH中。@MortenSteitz如果它解决了您的问题,您应该接受答案。@Justin,您不必将生成的dll/a文件和头文件复制到任何地方。只需将所有内容指向生成库的原始位置即可d完成了。它更简单,也节省了时间。从长远来看,在
debug
模式下构建库将节省时间-因此我建议改为。另外,请记住,wxWidgets的CMake
是WIP ATM。您可以尝试它-但正式的构建方式仍然是通过configure+make
@MortenSteitz,ple请看我上面的评论。@Igor我承认你的方法更简洁,但它不能在开箱即用的Windows上使用MSYS2(../configure--with msw将抛出比你建议的只指向编译器路径更复杂的错误)。@Igor我只是指向OP(因为它们对站点来说似乎相对较新)接受一个能解决他们问题的答案要比说“谢谢,它成功了”的评论要好。如果你有一个比贴出的更好的解决方案,那么你可能值得自己创造一个答案。
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
)