Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用cmake将与MSYS2一起安装的wxWidgets(3.1.1)包含到我们的项目中_Cmake_Wxwidgets_Clion_Msys2 - Fatal编程技术网

使用cmake将与MSYS2一起安装的wxWidgets(3.1.1)包含到我们的项目中

使用cmake将与MSYS2一起安装的wxWidgets(3.1.1)包含到我们的项目中,cmake,wxwidgets,clion,msys2,Cmake,Wxwidgets,Clion,Msys2,我们正试图在我们的项目中包含并运行wxWidgets。 我们正在使用CMake编译并将我们的库包含在msys2中。我们使用CLion作为IDE。经过几天的测试,我们仍然无法让它运行。有太多不同的错误来发布它们。 我想我们已经尝试了你能做的一切,读了你能读的所有东西,但仍然不起作用 我们还尝试安装整个wxWidget.zip文件夹,并通过路径实现所有内容,但仍然没有实现 有一些关于这个问题的帖子,但似乎没有任何效果 我的问题是,有没有人遇到同样的问题并解决了这个问题?是否有一个正确实施每件事的分步

我们正试图在我们的项目中包含并运行wxWidgets。 我们正在使用CMake编译并将我们的库包含在msys2中。我们使用CLion作为IDE。经过几天的测试,我们仍然无法让它运行。有太多不同的错误来发布它们。 我想我们已经尝试了你能做的一切,读了你能读的所有东西,但仍然不起作用

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

有一些关于这个问题的帖子,但似乎没有任何效果

我的问题是,有没有人遇到同样的问题并解决了这个问题?是否有一个正确实施每件事的分步指南


提前谢谢

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

  • 并将其解压缩到您选择的目录中
  • 运行CLion(并以以下方式构建wxWidgets):
    • 关闭任何打开的项目,然后执行从源文件导入项目的操作
    • 选择将wxWidgets解压缩到的目录
    • 选择
      使用现有的CMakeLists.txt
    • CMake完成加载后-构建项目(Ctrl+F9)。我建议使用发布模式
  • 在CLion中完成wxWidgets的构建之后,有一个名为“cmake build release”或“cmake build debug”的新文件夹。如果您想将wxWidgets集成到您的项目中,我建议:
    • 将所有
      .a
      -文件从/lib/gcc\u dll/复制到新的项目文件夹
    • 将所有
      .dll
      文件从/lib/gcc\u dll/复制到项目生成文件夹中
    • 将include文件夹从原始wxWidgets存档复制到您的项目中,在任何情况下
      setup.h
      从/lib/gcc_dll/mswud/wx/复制到include文件夹中
  • 编辑项目的CMakeLists.txt:
    • include\u目录中
      添加wxWidgets
      include
      文件夹的路径
    • 目标链接库中
      添加每个
      .a
      文件的路径
  • 在我的案例中,第4点产生了以下几行,使其非常清晰:

    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
    )