Win10下CMD编译Qt5.7示例报错:QQmlEngine文件未找到
解决QMake自动生成.pro文件缺失
QT += qml quick的问题 刚好碰到过类似的情况,我来帮你拆解一下问题和原因:
问题回顾
你在Win10+Qt5.7环境下,尝试用CMD编译官方Quick示例clocks,执行了这几步命令:
qmake -project qmake mingw32-make
结果碰到了编译报错:
../../shared/shared.h:42:22: fatal error: QQmlEngine: No such file or directory
手动给自动生成的.pro文件加上QT += qml quick后问题就解决了,但你疑惑为啥qmake -project没自动生成这行配置。
为啥会这样?
qmake -project的工作逻辑是扫描当前目录下的源文件,通过识别代码里的头文件引用和类来推断需要依赖的Qt模块,但它有个明显局限:
- 示例里的
shared.h是在上级目录的shared文件夹里,属于外部共享文件,qmake -project默认只会扫描当前目录的文件,不会递归识别外部路径的文件依赖,所以它看不到shared.h里引用了QQmlEngine,自然不会自动加上qml和quick模块。 - 而Qt Creator里的官方示例项目是预先配置好.pro文件的,已经包含了这些模块依赖,所以在Creator里能正常运行,但你用
qmake -project重新生成时,相当于从零开始分析依赖,就漏掉了外部文件的需求。
怎么解决?
有两种实用办法:
- 手动补加模块:最简单的就是像你做的那样,在生成的.pro文件里直接加上:
QT += qml quick - 让qmake扫描外部目录:如果不想每次手动加,可以在执行
qmake -project时,用-I参数指定外部头文件的目录,比如:
这样qmake就能扫描到qmake -project -I ../../sharedshared.h里的QQmlEngine引用,自动把QT += qml quick加到.pro文件里。
关于Sublime Text 3编译的小提示
如果想在Sublime里编译Qt项目,记得:
- 要么先手动把.pro文件配置好(加好必要的模块),再调用编译命令;
- 要么在Sublime的构建系统配置里,给
qmake -project加上-I参数指定外部目录,确保生成的.pro文件依赖完整; - 还要确认mingw的环境变量已经配好,不然
mingw32-make可能会找不到。
内容的提问来源于stack exchange,提问作者doUWannaBuildASnowMan
相关产品推荐
相关产品推荐

