Windows下MinGW环境使用CMake查找预编译wxWidgets的参数配置问题
问题根因
- 你使用的是预编译动态链接(DLL)版本wxWidgets,CMake自带的
FindwxWidgets模块默认优先搜索静态库,首次运行时匹配不到动态库的命名规则,导致识别失败。 - 手动传入
wxWidgets_LIBRARIES、wxWidgets_INCLUDE_DIRS参数,反而干扰了FindwxWidgets模块的自动搜索逻辑。 - CMakeLists.txt没有明确指定wxWidgets需要的组件,也没有开启Unicode配置匹配,导致模块搜索目标不明确。
- 第二次运行成功是因为首次运行虽然识别失败,但已经把部分搜索到的路径缓存到了
CMakeCache.txt中,第二次运行时模块不需要走完整搜索逻辑,直接用缓存值补全了配置,所以能正常识别。
解决步骤
第一步:修改CMakeLists.txt
替换原有内容为以下配置:
cmake_minimum_required(VERSION 3.18) project(Test) # 明确指定使用动态链接、Unicode版本wxWidgets set(wxWidgets_USE_STATIC OFF CACHE BOOL "Use static wxWidgets libraries") set(wxWidgets_USE_UNICODE ON CACHE BOOL "Use Unicode wxWidgets libraries") # 指定需要的wxWidgets组件,可根据实际需求增减 find_package(wxWidgets REQUIRED COMPONENTS core base) if(wxWidgets_FOUND) include(${wxWidgets_USE_FILE}) add_executable(MyTest WIN32 main.cpp) target_link_libraries(MyTest ${wxWidgets_LIBRARIES}) else() message(FATAL_ERROR "wxWidgets not found!") endif()
第二步:调整CMake运行命令
首次运行前先清空build目录下的所有文件,避免旧缓存干扰,再执行以下命令:
cmake .. -G "MinGW Makefiles" \ -DCMAKE_BUILD_TYPE=Release \ -DwxWidgets_ROOT_DIR=/c/wxWidgets-3.1.5/ \ -DwxWidgets_LIB_DIR=/c/wxWidgets-3.1.5/lib/gcc1020_x64_dll/ \ -DwxWidgets_CONFIGURATION=mswu
如果需要编译Debug版本,把CMAKE_BUILD_TYPE改为Debug,同时把wxWidgets_CONFIGURATION改为mswud即可。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

