VS Code通过CMake编译wxWidgets3.2代码时提示wx/version.h未找到
解决CMake查找wxWidgets时提示"wx/version.h file not found in C:/Program;C:/Program"的问题
问题描述
使用VS Code配合CMake编译基于wxWidgets 3.2的C++代码,已通过MSYS2安装mingw-w64-x86_64-gcc、mingw-w64-x86_64-cmake、mingw-w64-x86_64-wxwidgets3.2-msw组件,但CMake配置阶段报错:
wxWidgets wx/version.h file not found in C:/Program;C:/Program
相关执行日志:
[variant] Loaded new set of variants [kit] Successfully loaded 2 kits from C:\Users\walkiewi\AppData\Local\CMakeTools\cmake-tools-kits.json [proc] Executing command: C:\msys64\mingw64\bin\gcc.exe -v [main] Configuring folder: jcp [proc] Executing command: C:\msys64\mingw64\bin\cmake.EXE --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_C_COMPILER:FILEPATH=C:\msys64\mingw64\bin\gcc.exe -DCMAKE_CXX_COMPILER:FILEPATH=C:\msys64\mingw64\bin\g++.exe -Sc:/Users/walkiewi/Documents/projects/jcp -Bc:/Users/walkiewi/Documents/projects/jcp/build -G "MinGW Makefiles" [cmake] Not searching for unused variables given on the command line. [cmake] CMake Error at C:/msys64/mingw64/share/cmake/Modules/FindwxWidgets.cmake:225 (message): [cmake] wxWidgets wx/version.h file not found in C:/Program;C:/Program. [cmake] Call Stack (most recent call first): [cmake] C:/msys64/mingw64/share/cmake/Modules/FindwxWidgets.cmake:955 (wx_extract_version) [cmake] CMakeLists.txt:12 (find_package) [cmake] [cmake] [cmake] -- Configuring incomplete, errors occurred! [cmake] See also "C:/Users/walkiewi/Documents/projects/jcp/build/CMakeFiles/CMakeOutput.log". [proc] The command: C:\msys64\mingw64\bin\cmake.EXE --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_C_COMPILER:FILEPATH=C:\msys64\mingw64\bin\gcc.exe -DCMAKE_CXX_COMPILER:FILEPATH=C:\msys64\mingw64\bin\g++.exe -Sc:/Users/walkiewi/Documents/projects/jcp -Bc:/Users/walkiewi/Documents/projects/jcp/build -G "MinGW Makefiles" exited with code: 1 and signal: null
尝试修改FindwxWidgets.cmake的条件判断:
原代码:
if(WIN32 AND NOT CYGWIN AND NOT MSYS AND AND NOT CMAKE_CROSSCOMPILING) if(wxWidgets_FOUND AND MSYS)
修改为:
if(WIN32 AND NOT CYGWIN AND NOT MSYS AND NOT MINGW AND NOT CMAKE_CROSSCOMPILING) if(wxWidgets_FOUND AND (MSYS OR MINGW))
但问题未解决。
错误原因
报错里的C:/Program;C:/Program是关键——这说明CMake在解析路径时,把带空格的路径(比如C:\Program Files)错误地按空格分割成了两个不完整的路径,导致无法找到wxWidgets的头文件。
解决方案
1. 在CMakeLists.txt中直接指定wxWidgets的安装根目录
无需修改系统的CMake模块,直接在自己项目的CMakeLists.txt开头添加以下配置,强制CMake到MSYS2的mingw64目录查找wxWidgets:
# 指定wxWidgets的安装根目录(根据你的MSYS2路径调整) set(wxWidgets_ROOT_DIR "C:/msys64/mingw64") # 查找wxWidgets 3.2版本,指定需要的组件(core、base是基础组件,可根据需求添加其他) find_package(wxWidgets 3.2 REQUIRED COMPONENTS core base) # 导入wxWidgets的编译配置 include(${wxWidgets_USE_FILE})
2. 确保链接wxWidgets库
在添加可执行文件的部分,要把wxWidgets的库链接进去:
add_executable(your_app_name main.cpp) # 替换成你的可执行文件名和源文件 target_link_libraries(your_app_name ${wxWidgets_LIBRARIES})
3. 恢复修改过的FindwxWidgets.cmake
之前修改的系统CMake模块会影响其他项目,建议恢复成原始版本,避免后续出现其他兼容性问题。
内容的提问来源于stack exchange,提问作者Mateusz Walkiewicz
相关产品推荐
相关产品推荐

