为Visual Studio Community 2015构建Qt 5.6.0时出错

时间:2016-04-26 16:21:21

标签: qt compiler-errors visual-studio-2015 nmake

我一直在尝试构建Qt 5.6.0以用于Visual Studio 2015社区,但是在构建Visual Studio时,他们网站和Qt wiki上的文档并不是非常具体。我也尝试过其他教程来构建它,但没有成功。

教程我试过以下:
https://wiki.qt.io/Building_Qt_5_from_Git
https://doc.qt.io/qt-5/windows-building.html

这些是我在尝试构建它时采取的步骤:

  1. 将源代码从git repo克隆到D:\ Programs \ qt5。

  2. 检查出我想要的分支。在这种情况下,它是5.6.0。

  3. 仅克隆essentials模块子集以减少构建时间。

  4. 创建批处理脚本以设置cmd会话的环境变量并将其放在D:\ Programs \ qt5中:

    REM Set up \Microsoft Visual Studio 2015, where <arch> is \c amd64, \c x86, etc.
    CALL "D:\Programs\Visual Studio 2015 Community\VC\vcvarsall.bat" amd64
    SET _ROOT=D:\Programs\qt5
    SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH%
    REM Uncomment the below line when using a git checkout of the source repository
    SET PATH=%_ROOT%\qtrepotools\bin;%PATH%
    SET QMAKESPEC=win32-msvc2015
    SET _ROOT=
    REM When compiling with ICU, uncomment the lines below and change <icupath> appropriately:
    REM SET INCLUDE=<icupath>\include;%INCLUDE%
    REM SET LIB=<icupath>\lib;%LIB%
    REM SET PATH=<icupath>\lib;%PATH% 
    

    *尝试删除SET QMAKESPEC行,但不会影响产生的错误。

  5. 打开VS2015的开发人员命令提示符并导航到D:\ Programs \ qt5。

  6. 运行第4号脚本。

  7. 输入用于配置Qt5构建的命令。

    configure -developer-build -opensource -confirm-license -nomake tests -nomake examples -mp -skip qtwebengine -skip qtwebchannel
    

    *有没有办法使用configure命令只构建essentials模块子集

  8. 输入构建Qt的命令。

    nmake
    

    我尝试构建它时遇到此错误:

  9. 
        D:\Programs\qt5>nmake
    
        Microsoft (R) Program Maintenance Utility Version 14.00.23506.0
        Copyright (C) Microsoft Corporation.  All rights reserved.
    
                cd qtbase\ && ( if not exist Makefile D:\Programs\qt5\qtbase\bin\qmake D:\Programs\qt5\qtbase\qtbase.pro -o Makefile ) && nmake -f Makefile
    
        Microsoft (R) Program Maintenance Utility Version 14.00.23506.0
        Copyright (C) Microsoft Corporation.  All rights reserved.
    
                cd src\ && ( if not exist Makefile D:\Programs\qt5\qtbase\bin\qmake D:\Programs\qt5\qtbase\src\src.pro -o Makefile ) && nmake -f Makefile
    
        Microsoft (R) Program Maintenance Utility Version 14.00.23506.0
        Copyright (C) Microsoft Corporation.  All rights reserved.
    
                cd corelib\ && ( if not exist Makefile.qtzlib D:\Programs\qt5\qtbase\bin\qmake D:\Programs\qt5\qtbase\src\corelib\qtzlib.pro -o Makefile.qtzlib ) && nmake -f Makefile.qtzlib
    
        Microsoft (R) Program Maintenance Utility Version 14.00.23506.0
        Copyright (C) Microsoft Corporation.  All rights reserved.
    
                nmake -f Makefile.qtzlib.Debug all
    
        Microsoft (R) Program Maintenance Utility Version 14.00.23506.0
        Copyright (C) Microsoft Corporation.  All rights reserved.
    
                copy /y ..\..\lib\Qt5Zlibd.dll ..\..\bin
        The system cannot find the file specified.
                nmake -f Makefile.qtzlib.Release all
    
        Microsoft (R) Program Maintenance Utility Version 14.00.23506.0
        Copyright (C) Microsoft Corporation.  All rights reserved.
    
                copy /y ..\..\lib\Qt5Zlib.dll ..\..\bin
        The system cannot find the file specified.
                cd tools\bootstrap\ && ( if not exist Makefile D:\Programs\qt5\qtbase\bin\qmake D:\Programs\qt5\qtbase\src\tools\bootstrap\bootstrap.pro -o Makefile ) && nmake -f Makefile
    
        Microsoft (R) Program Maintenance Utility Version 14.00.23506.0
        Copyright (C) Microsoft Corporation.  All rights reserved.
    
                nmake -f Makefile.Debug
    
        Microsoft (R) Program Maintenance Utility Version 14.00.23506.0
        Copyright (C) Microsoft Corporation.  All rights reserved.
    
                cl -c -nologo -Zc:wchar_t -FS -Zi -MDd -D_HAS_EXCEPTIONS=0 -MP -GR -W3 -w34100 -w34189 -w44996 -WX /Fd..\..\..\lib\Qt5Bootstrapd.pdb -DUNICODE -DWIN32 -DWIN64 -DQT_BOOTSTRAPPED -DQT_LITE_UNICODE -DQT_NO_CAST_TO_ASCII -DQT_NO_CODECS -DQT_NO_DATASTREAM -DQT_NO_LIBRARY -DQT_NO_QOBJECT -DQT_NO_SYSTEMLOCALE -DQT_NO_THREAD -DQT_NO_UNICODETABLES -DQT_NO_USING_NAMESPACE -DQT_NO_DEPRECATED -DQT_NO_TRANSLATION -DQT_CRYPTOGRAPHICHASH_ONLY_SHA1 -DQT_NO_CAST_FROM_ASCII -DQT_BUILD_BOOTSTRAP_LIB -DQT_BUILDING_QT -D_CRT_SECURE_NO_WARNINGS -D_USE_MATH_DEFINES -DQT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x040800 -DQT_NO_EXCEPTIONS -I. -I..\..\3rdparty\zlib -I..\..\..\include -I..\..\..\include\QtCore -I..\..\..\include\QtCore\5.6.1 -I..\..\..\include\QtCore\5.6.1\QtCore -I..\..\..\include\QtXml -I..\..\..\include\QtXml\5.6.1 -I..\..\..\include\QtXml\5.6.1\QtXml -Itmp -I..\..\..\mkspecs\win32-msvc2013 -Fo.obj\debug\ @C:\Users\Justin\AppData\Local\Temp\nm3B49.tmp
        qlatincodec.cpp
        qtextcodec.cpp
        qutfcodec.cpp
        d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): error C2220: warning treated as error - no 'object' file generated (compiling source file ..\..\corelib\codecs\qlatincodec.cpp)
        d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): warning C4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc (compiling source file ..\..\corelib\codecs\qlatincodec.cpp)
        d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): note: to simplify migration, consider the temporary use of /Wv:18 flag with the version of the compiler with which you used to build without warnings (compiling source file ..\..\corelib\codecs\qlatincodec.cpp)
        d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): error C2220: warning treated as error - no 'object' file generated (compiling source file ..\..\corelib\codecs\qutfcodec.cpp)
        d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): warning C4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc (compiling source file ..\..\corelib\codecs\qutfcodec.cpp)
        d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): note: to simplify migration, consider the temporary use of /Wv:18 flag with the version of the compiler with which you used to build without warnings (compiling source file ..\..\corelib\codecs\qutfcodec.cpp)
        d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): error C2220: warning treated as error - no 'object' file generated (compiling source file ..\..\corelib\codecs\qtextcodec.cpp)
        d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): warning C4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc (compiling source file ..\..\corelib\codecs\qtextcodec.cpp)
        d:\programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): note: to simplify migration, consider the temporary use of /Wv:18 flag with the version of the compiler with which you used to build without warnings (compiling source file ..\..\corelib\codecs\qtextcodec.cpp)
        NMAKE : fatal error U1077: '"D:\Programs\Visual Studio 2015 Community\VC\BIN\amd64\cl.EXE"' : return code '0x2'
        Stop.
        NMAKE : fatal error U1077: '"D:\Programs\Visual Studio 2015 Community\VC\BIN\amd64\nmake.EXE"' : return code '0x2'
        Stop.
        NMAKE : fatal error U1077: 'cd' : return code '0x2'
        Stop.
        NMAKE : fatal error U1077: 'cd' : return code '0x2'
        Stop.
        NMAKE : fatal error U1077: 'cd' : return code '0x2'
        Stop.
    
    

    我已尝试搜索此错误以找到修复程序,但到目前为止,我还没有能够获得有关它的更多信息。

    非常感谢任何关于这个主题的帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

这是一个手动修复,而不是解决方案本身,但如果您查看错误消息,您会看到:

  

cd tools \ bootstrap \&amp;&amp; (如果不存在Makefile ......

     

nmake -f Makefile.Debug ....

转到该文件夹​​并打开MakeFile.Debug文件。在那里你会找到一个名为CXXFLAGS的条目。追加&#34; / EHsc&#34;到最后并保存文件。

然后再次运行 nmake

错误有点令人困惑。第一个

  

错误C2220:警告被视为错误 - 没有&#39;对象&#39;文件生成

是Qt遇到的问题的跟随错误。 Visual Studio 2015有一些新的重新签名导致实际问题:

  

警告C4577:&#39; noexcept&#39;在没有指定异常处理模式的情况下使用

还提到了本地解决方案:

  

指定/ EHsc

这就是我的修复工作。它只是告诉编译器忽略一些异常或以不同方式处理它们。在这种情况下,问题可能来自抛出异常的C函数,但C ++包装器不处理它。

如需了解更多信息,请阅读/EH documentation

答案 1 :(得分:0)

我编译没有问题(包括openssl和mysql)。我想出了一些观点:

  • Perl-bin必须在Git面前。
  • 使用Python 2.7(当前3.x将崩溃角度)。
  • perl init-repository 与-f一起使用(否则可能会有不一致的版本)
  • 使用正确的x86 / x64第三方库。 (在x64命令提示符下编译,您必须使用x64库)。
  • 分支5.7似乎是错误的(使用qt3d编译问题)。分支dev(2016年8月29日起)似乎是我们的朋友。