【问题标题】:Cmake cannot find wxWidgets on WindowsCmake 在 Windows 上找不到 wxWidgets
【发布时间】:2021-01-16 11:19:48
【问题描述】:

我搜索了这个主题并找到了thisthis,但它似乎只与构建 wxWidgets 或不包含我的问题的答案有关。

我已经在 Windows 上成功构建了静态库 für wxWidgets,但我现在正在努力使用 Cmake 将库正确包含到我的项目中。这是我的CMakeLists.txt

set(PROJECT_NAME wxapp)
project(${PROJECT_NAME})
cmake_minimum_required(VERSION 2.8)

set(SRC_LIST main.cpp app.cpp app.h frame.cpp frame.h)
add_executable(${PROJECT_NAME} WIN32 ${SRC_LIST})

find_package(wxWidgets REQUIRED net gl core base)
include(${wxWidgets_USE_FILE})
target_link_libraries(${PROJECT_NAME} ${wxWidgets_LIBRARIES})

set(wxWidgets_USE_LIBS ON)
set(wxWidgets_CONFIGURATION msw)

我已经正确设置了WXWIN 路径变量。然而,CMake 会在此配置中引发错误:

Could NOT find wxWidgets (missing: wxWidgets_LIBRARIES
wxWidgets_INCLUDE_DIRS net gl core base)

我尝试了多种建议,例如使用下载预构建动态库并按照建议 here 手动添加它们,例如

set(wxWidgets_ROOT_DIR $ENV{WXWIN})
set(wxWidgets_LIBRARIES $ENV{WXWIN}/include)
set(wxWidgets_INCLUDE_DIR $ENV{WXWIN}/lib/vc14x_x64_dll)
include_directories(includes $ENV{WXWIN} $ENV{WXWIN}/include $ENV{WXWIN}/lib/vc14x_x64_dll)
link_directories($ENV{WXWIN} $ENV{WXWIN}/include $ENV{WXWIN}/lib/vc14x_x64_dll) # this seems to be a discouraged/deprecated method

但都无济于事。

【问题讨论】:

  • “我已经成功地在 Windows 上为 wxWidgets 构建了 static 库” - 但是 vc14x_x64_dll 目录的名称表明您有 .dll 库,即 动态的。在任何地方,您为wxWidgets_ROOT_DIR 变量分配了什么确切值以及该目录下的文件布局是什么?
  • 您需要在调用find_package 之前设置这些变量。另外,请在此处查看搜索路径:cmake.org/cmake/help/latest/command/…
  • 欢迎来到 Stack Overflow!您是否尝试使用谷歌搜索错误消息?这样做时,我发现了thisthis 问题,它们似乎有一些有用的建议。你试过这些吗?
  • @StephenNewell:find_package 的文档仅描述了CONFIG 文件的搜索过程。但是消息Could NOT find wxWidgets (missing: ...) 暗示已经使用MODULE 模式,并且CMake 已经找到了对应的“Find”脚本。此脚本实现的搜索过程在脚本本身(以及对应的doc page)中进行了描述,find_package 并未对其进行标准化。
  • @Tsyvarev:是的,我在 D:\libs\wxWidgets\include\wx\wx.h 下有这个文件,我的 WXWIN 设置为 D:\libs\wxWidgets。那条路应该行得通,对吧?

标签: cmake wxwidgets


【解决方案1】:

解决方法(至少对我有用):

我从建议的语句中更改了find_package 命令:

find_package(wxWidgets COMPONENTS gl core base OPTIONAL_COMPONENTS net)

find_package(wxWidgets 3.1 REQUIRED)

this post 中的用户已将其包含在他/她的 CMake 文件中并且出于绝望,我尝试了此方法,它确实有效。似乎在某些未知情况下 CMake 的配置无法按照说明中提供的语句正常运行。如果我将命令更改为新语句,我的静态构建以及自编译和预编译的 dll 将被 CMake 完美识别。

this post 的启发,我还清除了 CMake 缓存。根据这篇文章,在某些情况下,Windows 和 CMake 缓存似乎存在问题,但原因让我无法理解。我可以复制那里用户观察到的行为:

在Windows下,你必须指向安装目录,例如

set(wxWidgets_ROOT_DIR "C:/wxWidgets-3.1.3") set(wxWidgets_LIB_DIR "C:/wxWidgets-3.1.3/lib/vc14x_x64_dll")

但是随后的行为仍然很奇怪。当我使用 CMake GUI (3.16, 最新),行为是这样的

  1. 删除缓存(只是为了保持一致)
  2. 按“配置”按钮 --> 失败:C:/Program Files/CMake/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 处的 CMake 错误 (消息):找不到 wxWidgets(缺少:wxWidgets_LIBRARIES wxWidgets_INCLUDE_DIRS 核心基础 qa adv net html gl propgrid richtext)
  3. 再次按下“配置”按钮 --> 成功

在清除缓存和重新加载项目时,我还观察到 CMake IDE CLion 和 CodeBlocks 中的一些不一致行为。

所以,我不知道缓存清除究竟如何影响我的问题的解决。但是如果我只是清除缓存,重新加载我的项目并将 CMake 指令留在find_package(wxWidgets COMPONENTS gl core base OPTIONAL_COMPONENTS net),尽管WXWIN 路径设置正确,CMake 将找不到我的安装。

如果您对此有更多了解,我很高兴得到纠正。

【讨论】:

    猜你喜欢
    • 2018-10-19
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2015-12-08
    • 2021-11-13
    • 2017-11-27
    相关资源
    最近更新 更多