Ошибки при сборке Qt 5.6.0 для Visual Studio Community 2015

Я пытался собрать Qt 5.6.0 для использования с сообществом Visual Studio 2015, но документация на их веб-сайте и в вики Qt не очень специфична, когда речь идет о его создании для Visual Studio. Я также пробовал другие учебники для его построения, но безуспешно.

Учебники, которые я пробовал следующие:
https://wiki.qt.io/Building_Qt_5_from_Git
https://doc.qt.io/qt-5/windows-building.html

Вот шаги, которые я предпринимаю, пытаясь построить его:

  1. Клонировал исходный код из репозитория git в папку D:\Programs\qt5.

  2. Проверил ветку, которую хотел. В данном случае это было 5.6.0.

  3. Клонировали только подмножество базовых модулей, чтобы сократить время сборки.

  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, чтобы построить только подмножество базовых модулей?

  8. Введите команду для сборки Qt.

    nmake
    

    Я получаю эту ошибку, когда пытаюсь ее построить:

    D: \ Programs \ qt5> NMAKE

    Утилита обслуживания программ Microsoft (R), версия 14.00.23506.0
    Авторское право (C) Microsoft Corporation. Все права защищены.

            cd qtbase\ && (если не существует, Makefile D:\Programs\qt5\qtbase\bin\qmake D:\Programs\qt5\qtbase\qtbase.pro -o Makefile) && nmake -f Makefile

    Утилита обслуживания программ Microsoft (R), версия 14.00.23506.0
    Авторское право (C) Microsoft Corporation. Все права защищены.

            cd src\ && (если не существует, Makefile D:\Programs\qt5\qtbase\bin\qmake D:\Programs\qt5\qtbase\src\src.pro -o Makefile) && nmake -f Makefile

    Утилита обслуживания программ Microsoft (R), версия 14.00.23506.0
    Авторское право (C) Microsoft Corporation. Все права защищены.

            cd corelib\ && (если не существует 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), версия 14.00.23506.0
    Авторское право (C) Microsoft Corporation. Все права защищены.

            nmake -f Makefile.qtzlib.Debug all

    Утилита обслуживания программ Microsoft (R), версия 14.00.23506.0
    Авторское право (C) Microsoft Corporation. Все права защищены.

            copy /y ..\..\lib\Qt5Zlibd.dll ..\..\bin
    Система не может найти указанный файл.
            nmake -f Makefile.qtzlib.Release all

    Утилита обслуживания программ Microsoft (R), версия 14.00.23506.0
    Авторское право (C) Microsoft Corporation. Все права защищены.

            copy /y ..\..\lib\Qt5Zlib.dll ..\..\bin
    Система не может найти указанный файл.
            cd tools\bootstrap\ && (если не существует, Makefile D:\Programs\qt5\qtbase\bin\qmake D:\Programs\qt5\qtbase\src\tools\bootstrap\bootstrap.pro -o Makefile) && nmake -f Makefile

    Утилита обслуживания программ Microsoft (R), версия 14.00.23506.0
    Авторское право (C) Microsoft Corporation. Все права защищены.

            nmake -f Makefile.Debug

    Утилита обслуживания программ Microsoft (R), версия 14.00.23506.0
    Авторское право (C) Microsoft Corporation. Все права защищены.

            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): ошибка C2220: предупреждение обрабатывается как ошибка - файл объекта не создан (исходный файл компилируется).. \.. \ corelib \ кодеки \ qlatincodec.cpp)
    d: \ Programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): предупреждение C4577: "noexcept" используется без указания режима обработки исключений; прекращение при исключении не гарантируется. Укажите /EHsc (компиляция исходного файла..\..\corelib\codecs\qlatincodec.cpp)
    d:\ Programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): примечание: для упрощения миграции рассмотрите временное использование флага /Wv:18 с версия компилятора, с которой вы использовали сборку без предупреждений (компиляция исходного файла..\..\corelib\codecs\qlatincodec.cpp)
    d:\ Programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): ошибка C2220: предупреждение обрабатывается как ошибка - файл объекта не создан (исходный файл компилируется).. \.. \ corelib \ кодеки \ qutfcodec.cpp)
    d: \ Programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): предупреждение C4577: "noexcept" используется без указания режима обработки исключений; прекращение при исключении не гарантируется. Укажите /EHsc (компиляция исходного файла..\..\corelib\codecs\qutfcodec.cpp)
    d:\ Programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): примечание: для упрощения миграции рассмотрите временное использование флага /Wv:18 с версия компилятора, с которой вы использовали сборку без предупреждений (компиляция исходного файла..\..\corelib\codecs\qutfcodec.cpp)
    d:\ Programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): ошибка C2220: предупреждение обрабатывается как ошибка - файл объекта не создан (исходный файл компилируется).. \.. \ corelib \ кодеки \ qtextcodec.cpp)
    d: \ Programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): предупреждение C4577: "noexcept" используется без указания режима обработки исключений; прекращение при исключении не гарантируется. Укажите /EHsc (компиляция исходного файла..\..\corelib\codecs\qtextcodec.cpp)
    d:\ Programs\qt5\qtbase\include\qtcore\../../src/corelib/global/qflags.h(52): примечание: для упрощения миграции рассмотрите временное использование флага /Wv:18 с версия компилятора, с которой вы использовали сборку без предупреждений (компиляция исходного файла..\..\corelib\codecs\qtextcodec.cpp)
    NMAKE: фатальная ошибка U1077: '"D:\Programs\ Сообщество Visual Studio 2015 \VC\BIN\amd64\cl.EXE"': код возврата '0x2'
    Стоп.
    NMAKE: фатальная ошибка U1077: '"D:\Programs\ Сообщество Visual Studio 2015 \VC\BIN\amd64\nmake.EXE" ": код возврата' 0x2 '
    Стоп.
    NMAKE: фатальная ошибка U1077: "cd": код возврата "0x2"
    Стоп.
    NMAKE: фатальная ошибка U1077: "cd": код возврата "0x2"
    Стоп.
    NMAKE: фатальная ошибка U1077: "cd": код возврата "0x2"
    Стоп.

Я пытался найти эту ошибку, чтобы найти исправление, но до сих пор мне не удалось получить много информации об этом вообще.

Любая помощь по этому вопросу будет принята с благодарностью, спасибо.

2 ответа

Решение

Это ручное исправление, а не решение само по себе, но если вы посмотрите на сообщение об ошибке, вы увидите это:

cd tools \ bootstrap \ && (если не существует Makefile...

nmake -f Makefile.Debug....

Перейдите в эту папку и откройте файл MakeFile.Debug. Там вы найдете запись под названием CXXFLAGS. Добавьте "/EHsc" в конец и сохраните файл.

Затем просто запустите nmake снова.

Ошибка немного сбивает с толку. Первый

ошибка C2220: предупреждение рассматривается как ошибка - файл объекта не создан

является следующей ошибкой из проблемы, с которой сталкивается Qt. Visual Studio 2015 имеет несколько новых изменений, которые вызывают настоящую проблему:

предупреждение C4577: "noexcept" используется без указания режима обработки исключений

Местное решение также упоминается:

Указать / EHsc

Это то, что делает мое исправление. Он просто указывает компилятору игнорировать некоторые исключения или обрабатывать их по-другому. В этом случае проблема, вероятно, возникает из функции C, которая выдает исключение, но оболочка C++ не обрабатывает ее.

Для получения дополнительной информации, пожалуйста, прочитайте / EH документацию.

Я скомпилировал без проблем (в том числе openssl и mysql). Я понял некоторые моменты:

  • Perl-bin должен быть перед Git.
  • Используйте Python 2.7 (текущий 3.x потерпит крах).
  • Используйте perl init-repository с -f (в противном случае у вас могут быть несовместимые версии)
  • Используйте правильные сторонние библиотеки x86 / x64. (Компиляция в командной строке x64 требует использования библиотек x64).
  • Ветка 5.7 похоже глючит (проблемы с компиляцией с qt3d). Ветка dev (с 29 августа 2016 года), кажется, наш друг.
Другие вопросы по тегам