Windows下用CMake与Qt捆绑MinGW构建Qt5.11.0项目遇问题
Windows下CMake构建Qt项目的常见问题排查与解决
我来帮你梳理下Windows环境下用CMake构建Qt项目时的常见问题和对应的解决办法,结合你给出的CMake配置,我们一步步来排查:
首先明确你的场景:
我正尝试在Windows系统上构建Qt项目,项目采用CMake构建系统。CMake中包含Qt初始化配置:
set(CMAKE_INCLUDE_CURRENT_DIR ON) find_package( Qt5Core REQUIRED ) find_package( Qt5Widgets REQUIRED ) find_package( Qt5Gui REQUIRED ) qt5_add_resources(RESOURCE_ADDED ${QT_RESOURCES}) qt5_wrap_cpp(UI_SOURCE ${QOBJECT_HEADERS} ) qt5_wrap_ui( UI_HDRS ${UI_FILES} )此外,CMakeLists.txt文件中包含链接配置:
target_link_libraries(SampleProject Qt5::Core Qt5::Widgets Qt5::Gui )但在构建过程中遇到了问题。
1. 先确认Qt与CMake的路径匹配
这是Windows下最容易踩的坑:
- 首先检查系统环境变量里有没有设置
Qt5_DIR,它需要指向你Qt安装目录下的lib/cmake/Qt5路径,比如C:\Qt\5.15.2\msvc2019_64\lib\cmake\Qt5 - 如果没设置环境变量,也可以在CMake生成项目时手动指定路径,比如用Visual Studio的话,命令行可以这么写:
cmake .. -G "Visual Studio 16 2019" -A x64 -DCMAKE_PREFIX_PATH=C:\Qt\5.15.2\msvc2019_64 - 一定要看CMake的输出日志,如果出现
Could NOT find Qt5xxx的错误,那肯定是路径没配对,优先检查这里。
2. 确保Qt工具链能被CMake找到
Qt的moc、uic、rcc这些工具是构建必需的:
- 把Qt安装目录下的
bin文件夹(比如C:\Qt\5.15.2\msvc2019_64\bin)添加到系统PATH环境变量里,这样CMake才能调用到这些工具 - 如果还是提示找不到工具,可以在CMakeLists.txt里手动指定Qt模块的路径,比如:
set(Qt5_DIR "C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5") set(Qt5Core_DIR "C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5Core")
3. 检查CMake变量是否正确定义
你用到的QT_RESOURCES、QOBJECT_HEADERS、UI_FILES这些变量必须正确指向对应的文件:
- 比如在CMakeLists.txt里要提前定义好:
set(QOBJECT_HEADERS mainwindow.h) set(UI_FILES mainwindow.ui) set(QT_RESOURCES resources.qrc) - 如果这些变量是空的,那
qt5_wrap_cpp、qt5_wrap_ui这些命令根本不会生成对应的源文件,自然会编译报错。
4. 别漏了把生成的文件加入目标
你用qt5_wrap_cpp等命令生成的UI_SOURCE、UI_HDRS、RESOURCE_ADDED必须加到add_executable里:
add_executable(SampleProject main.cpp mainwindow.cpp ${UI_SOURCE} ${UI_HDRS} ${RESOURCE_ADDED} )
要是漏了这些,会出现“未定义引用”或者找不到UI相关类的错误。
5. 编译器和Qt版本要匹配
Windows下Qt的版本和编译器必须对应:
- 比如你装的是Qt的msvc2019版本,就必须用Visual Studio 2019来编译,不能用2022或者MinGW
- 还要注意架构一致:Qt装的是x64,CMake生成项目时也要选x64架构,不然链接的时候会出现一堆错误。
6. 清理缓存重来
有时候CMake的缓存会搞出奇怪的问题,直接删掉整个build文件夹,重新运行CMake配置和构建命令,大概率能解决一些莫名其妙的错误。
内容的提问来源于stack exchange,提问作者Megaxela
相关产品推荐
相关产品推荐

