我搜索了这个主题并找到了this和this,但它似乎只与buildingwxWidgets有关,或者不包含我的问题的答案。
我已经在 Windows 上成功构建了 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
但一切都无济于事。
解决方法(至少对我有用):
我从建议的语句中更改了
find_package
命令:
find_package(wxWidgets COMPONENTS gl core base OPTIONAL_COMPONENTS net)
到
find_package(wxWidgets 3.1 REQUIRED)
这篇文章中的一位用户将其包含在他/她的 CMake 文件中,出于绝望,我尝试了这个,它确实有效。似乎在某些未知情况下 CMake 的配置无法按照说明中提供的语句正常运行。如果我将命令更改为新语句,我的静态构建以及自编译和预编译的 dll 将被 CMake 完美识别。 受
这篇文章的启发,我还清除了 CMake 缓存。根据这篇文章,在某些情况下 Windows 和 CMake 缓存似乎存在问题,但我不明白原因。我可以复制用户观察到的行为:
在Windows下,您必须指向安装目录,例如设置(wxWidgets_ROOT_DIR“C:/wxWidgets-3.1.3”)设置(wxWidgets_LIB_DIR “C:/wxWidgets-3.1.3/lib/vc14x_x64_dll”)
但是行为仍然很奇怪。当我使用 CMake GUI (3.16, 最新),行为是这样的
删除缓存(只是为了保持一致)
在清除缓存和重新加载项目时,我还观察到 IDE CLion 和 CodeBlocks 中的 CMake 存在一些不一致的行为。
- 按“配置”按钮 --> 失败:CMake 错误:C:/Program Files/CMake/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (消息):找不到wxWidgets(缺少:wxWidgets_LIBRARIES wxWidgets_INCLUDE_DIRS 核心基础 qa adv net html gl propgrid richtext)
- 再次按“配置”按钮 --> 成功
所以,我不知道缓存清除到底如何影响我的问题的解决。但是,如果我只是清除缓存,重新加载项目并将 CMake 指令保留在 find_package(wxWidgets COMPONENTS gl core base OPTIONAL_COMPONENTS net)
,尽管
WXWIN
路径设置正确,CMake 也不会找到我的安装。
如果您对此有更多了解,我很高兴得到纠正。