整个一下午都在为Qt中出现的构建及编译问题而纠结,终于发现了问题所在,故记录下来并阐述解决方法。
问题描述:
当笔者运行qtNetTest的qt widget项目时,一直报错:
Running steps for project qtNetTest... Could not start process "F:\Qt_5.3\5.3\mingw482_32\bin\qmake.exe" C:\ProjectFolder\qt_projects\qtNetTest\qtNetTest.pro -r -spec win32-g++ "CONFIG+=debug" Error while building/deploying project qtNetTest (kit: Desktop Qt 5.3.0 MinGW 32bit) When executing step 'qmake' Elapsed time: 00:00. |
问题剖析及解决方案:
刚开始,笔者一直以为是项目文件路径存在中文字符,当仔细思考及验证后,发现中文项目路径一般的报错信息为:
Running steps for project qtNetTest... Starting process "F:\Qt_5.3\5.3\mingw482_32\bin\qmake.exe" C:\程序\qt_projects\qtNetTest\qtNetTest.pro -r -spec win32-g++ "CONFIG+=debug" Cannot find file : C:\程序\qt_projects\qtNetTest\qtNetTest.pro Error while building/deploying project qtNetTest (kit: Desktop Qt 5.3.0 MinGW 32bit) When executing step 'qmake' Elapsed time: 00:00. |
此种情况的报错与笔者所遇到的问题的不同就在于后者的报错信息中出现了”Cannot find file”信息,此种信息表示qmake程序无法找到.pro文件,导致此错误的原因即在于项目文件路径中有中文,而qmake无法识别中文(字符编码集的不同,当然通过修改qt的字符编码集是可以实现识别中文的),从而导致错误发生。
对于自己所遇到的报错问题,笔者发现错误发生的关键在于build directory(构建目录)的设定。
在发生错误时,
而正确的情况下,应该为:
我们需要将构建目录设置为项目文件夹所在目录。
当然,这里,对于构建目录还有两点说明(这两种情况下,程序均可以顺利通过构建和编译):
1、qmake不支持构建目录在源文件目录之下(不建议使用此种方法):
2、Shadow build(隐式构建):上面所述情况皆为隐式构建。
***显式构建,构建目录与工程目录相同(个人比较推荐此种构建方式,因为文件组织更加有条理,更加易于管理)。
小结
对于遇到的此问题,个人究其原因在于:当改变qt的工作目录时,由于文件是移动的过程,对于项目运行环境的文件改变并未随着文件移动而改变,因此,我们在移动项目文件夹后应该重新检查项目的构建和运行环境。当然,对于中文路径,依旧需要留意。