2016-04-26 137 views
3

我一直在試圖構建Qt 5.6.0以便與Visual Studio 2015社區一起使用,但是它們的網站和Qt wiki上的文檔並不是很具體爲Visual Studio構建它。我也嘗試過其他教程來構建它,但沒有成功。爲Visual Studio Community 2015構建Qt 5.6.0時的錯誤

教程我曾嘗試以下:
https://wiki.qt.io/Building_Qt_5_from_Git
https://doc.qt.io/qt-5/windows-building.html

這些是我試圖建立它時採取的步驟:

  1. 從git倉庫到d克隆的源代碼:\程序\ QT5。

  2. 檢出了我想要的分支。在這種情況下,它是5.6.0。

  3. 只克隆了essentials模塊子集以減少構建時間。

  4. 創建一個批處理腳本來設置環境變量的CMD會話,並把它放在d:\程序\ QT5:試圖消除SET QMAKESPEC線

    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% 
    

    *,並沒有影響由此產生的錯誤。

  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命令只建立要領模塊集的方法嗎?

  8. 輸入建立Qt的命令。

    nmake 
    

    我得到這個錯誤,當我嘗試構建它:

 

    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. 

我試圖尋找這個錯誤找到一個解決方法,但到目前爲止,我還沒有能得到關於它的很多信息。

任何有關這個問題的幫助將不勝感激,謝謝。

+0

'SET QMAKESPEC = win32-msvc2013'看起來不對,請嘗試'SET QMAKESPEC = win32-msvc2015'。或者根本不要明確設置mkspec。 (不完全確定是否可行,但值得一試) –

+0

我試着將QMAKESPEC設置爲win32-msvc2015,並刪除該行,但導致了相同的錯誤。感謝您的快速回復:)編輯原始問題以反映更改。 – JRud52

回答

1

這是一個手工修復,而不是解決方案本身,但如果你看看錯誤信息您看到這一點:

CD工具\引導\ & &(如果不存在的Makefile ...

nmake -f Makefile.Debug ....

轉到該文件夾​​並打開文件MakeFile.Debug。在那裏您會找到一個名爲CXXFLAGS的條目。追加「/ EHsc」到最後並保存文件。

然後再簡單地運行nmake

該錯誤稍有混淆。第一個

錯誤C2220:警告視爲錯誤 - 沒有「對象」文件生成

是從問題Qt是具有以下錯誤。 Visual Studio的2015年具有使實際問題的一些新redisigns:指定

'noexcept' 沒有異常處理模式下使用的本地解決方案也被提及:

警告C4577

指定/ EHsc

這就是我的修復程序所做的。它只是告訴編譯器忽略一些異常或以不同的方式處理它們。在這種情況下,問題可能出現在引發異常的C函數中,但C++包裝器不處理它。

欲瞭解更多信息,請閱讀/EH documentation

0

我編譯時沒有問題(包括openssl和mysql)。我想了一下幾點:

  • Perl-bin必須在Git之前。
  • 使用Python 2.7(當前3.x會崩潰角度)。
  • 使用perl的初始化存儲庫使用-f(否則你可能有不一致的版本)
  • 使用正確的x86/x64的第三方庫。 (在x64命令提示符下編譯,您必須使用x64庫)。
  • 分支5.7似乎是越野車(用qt3d編譯問題)。分行dev(2016年8月29日起)似乎是我們的朋友。
相關問題