Обновление моего окружения разработчика

Пришло время обновления.

Компилятор TGM-GCC 10.3.0 (x64)

MinGW-w64 заменил на TDM-GCC 10.3.0. Скачал установщик, и установил в песочнице (Windows Sandbox) по пути c:\dev\10.3.0\x64\tdm-gcc. По окончанию установки скопировал папку из песочницы в хостовую систему.

OpenSSL 3.0.3

Так как мне нужен Qt с поддержкой OpenSSL, буду его собирать. Сборкубуду производить в MSys2, поскольку у меня он всё равно есть (если он не нужен, его вместе с компилятором можно установить в песочнице).

Качаю исходники openssl-3.0.3.tar.gz, распаковываю и перехожу в директорию с исходниками (у меня это /d/tmp/build/openssl-3.0.3). Поскольку я хочу использовать TDM-GCC, то ставлю его в пути раньше всего остального.

$ cd /d/tmp/build/openssl-3.0.3
$ export PATH=/c/dev/10.3.0/x64/tdm-gcc/bin/:$PATH

Конфигурирую, собираю и устанавливаю статическую сборку

$ ./Configure no-shared --prefix=/c/dev/10.3.0/x64/openssl-3.0.3/static mingw64
$ mingw32-make -j 16
$ mingw32-make install_sw

Конфигурирую, собираю и устанавливаю динамическую сборку

$ ./Configure shared --prefix=/c/dev/10.3.0/x64/openssl-3.0.3/shared mingw64
$ mingw32-make -j 16
$ mingw32-make install_sw

Qt 5.15.4

Для сборки потребуется python (я использовал 3.9.7, у меня он расположен в C:\dev\tools\python-3.9.7\), если его нет, то придётся поставить.

Качаю исходники qt-everywhere-opensource-src-5.15.4.zip, распаковываю в d:\tmp\build\qt-everywhere-src-5.15.4. Сборку буду производить out-of-source, поэтому создаю рядом пустую директорию для сборки d:\tmp\build\qt-everywhere-src-5.15.4-build.

Начну со статической сборки. Запускаю командную строку, перехожу в директорию сборки, конфигурирую, компилирую и устанавливаю статическую сборку (release-only). Из-за проблем со сборкой отключаю рендеринг через DirectX12 и поддержку WMF, поскольку мне они всё равно не нужны.

d:\> cd d:\tmp\build\qt-everywhere-src-5.15.4-build
d:\tmp\build\qt-everywhere-src-5.15.4-build> ..\qt-everywhere-src-5.15.4\configure -prefix C:\dev\10.3.0\x64\Qt\5.15.4\static OPENSSL_LIBS="-llibssl -llibcrypto -lcrypt32 -lgdi32 -lws2_32" -openssl-linked -I C:\dev\10.3.0\x64\openssl-3.0.3\static\include -L C:\dev\10.3.0\x64\openssl-3.0.3\static\lib64 -opensource -nomake tests -no-compile-examples -confirm-license -release -optimize-size -static -c++std c++17 -static-runtime -silent -feature-relocatable -opengl desktop -no-wmf -no-feature-d3d12
d:\tmp\build\qt-everywhere-src-5.15.4-build> mingw32-make -j16
d:\tmp\build\qt-everywhere-src-5.15.4-build> mingw32-make install

Теперь динамическая сборка. Удаляю всё из директории сборки, конфигурирую, компилирую и устанавливаю динамическую сборку (debug+release). Из-за проблем со сборкой отключаю рендеринг через DirectX12, а вот поддержку WMF не отключаю, потому что и с ней собирается нормально.

d:\tmp\build\qt-everywhere-src-5.15.4-build> set OPENSSL_HOME=C:\dev\10.3.0\x64\openssl-3.0.3
d:\tmp\build\qt-everywhere-src-5.15.4-build> ..\qt-everywhere-src-5.15.4\configure -prefix C:\dev\10.3.0\x64\Qt\5.15.4\shared OPENSSL_LIBS="-llibssl -llibcrypto -lcrypt32 -lgdi32 -lws2_32" -openssl-linked -I C:\dev\10.3.0\x64\openssl-3.0.3\static\include -L C:\dev\10.3.0\x64\openssl-3.0.3\static\lib64 -opensource -nomake tests -no-compile-examples -confirm-license -debug-and-release -optimize-size -c++std c++17 -silent -feature-relocatable -opengl desktop -no-feature-d3d12
d:\tmp\build\qt-everywhere-src-5.15.4-build> mingw32-make -j16
d:\tmp\build\qt-everywhere-src-5.15.4-build> mingw32-make install

QtCreator 7.0.2

Качаю архив с исходниками, распаковываю в d:\tmp\build\qt-creator-opensource-src-7.0.2 и обнаруживаю, что теперь его нельзя собрать через qmake – только CMake или QBS. Выбираю CMake – он мне знаком и его можно скачать уже собранным в виде архива. Качаю CMake-3.23.2 и распаковываю в c:\dev\tools\cmake-3.23.2-windows-x86_64. Python буду использовать тот же, что и при сборке Qt.

Сборку буду производить out-of-source, поэтому создаю директорию для сборки d:\tmp\build\qt-creator-opensource-src-7.0.2-build.

Запускаю командную строку, перехожу в директорию сборки, устанавливаю необходимые пути, конфигурирую (с поддержкой новомодной и расхваливаемой QBS – надо же посмотреть, что это) и пытаюсь собрать.

d:\> cd d:\tmp\build\qt-creator-opensource-src-7.0.2-build
d:\tmp\build\qt-creator-opensource-src-7.0.2-build> set PATH=C:\dev\tools\python-3.9.7;C:\dev\tools\cmake-3.23.2-windows-x86_64\bin;C:\dev\10.3.0\x64\Qt\5.15.4\shared\bin;C:\dev\10.3.0\x64\tdm-gcc\bin;%PATH%
d:\tmp\build\qt-creator-opensource-src-7.0.2-build> cmake -G"MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUILD_QBS=ON ..\qt-creator-opensource-src-7.0.2
d:\tmp\build\qt-creator-opensource-src-7.0.2-build> cmake --build . -j 16

Поскольку у меня сборка ломается с вот таким сообщением об ошибке

In file included from D:\tmp\build\qt-creator-opensource-src-7.0.2\src\shared\qbs\src\shared\qtscript\src\script\bridge\qscriptfunction.cpp:43:
D:/tmp/build/qt-creator-opensource-src-7.0.2-build/src/shared/qbs/src/lib/scriptengine/include/QtScript/5.15.4/QtScript/private/qscriptengine_p.h:1:10: fatal error: ../../../../../../../../../../../../qt-creator-opensource-src-7.0.2/src/shared/qbs/src/shared/qtscript/src/script/api/qscriptengine_p.h: No such file or directory
    1 | #include "../../../../../../../../../../../../qt-creator-opensource-src-7.0.2/src/shared/qbs/src/shared/qtscript/src/script/api/qscriptengine_p.h"
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

начинаю рукосуйствовать. Разбираться с источником проблемы я не хочу, поэтому лечение будет симптоматическим – в директории d:\tmp\build\qt-creator-opensource-src-7.0.2-build\src\shared\qbs\src\lib\scriptengine\include\QtScript\5.15.4\QtScript\private лежат заголовочные файлы, содержимое которых и не позволяет проекту собраться. Во всех этих файлах нужно убрать одно “../”
Например:

БылоСтало
include “../../../../../../../../../../../../qt-creator-opensource-src-7.0.2/src/shared/qbs/src/shared/qtscript/src/script/parser/qscriptastfwd_p.h”include “../../../../../../../../../../../qt-creator-opensource-src-7.0.2/src/shared/qbs/src/shared/qtscript/src/script/parser/qscriptastfwd_p.h”

Теперь можно приступить к сборке и установке

d:\tmp\build\qt-creator-opensource-src-7.0.2-build> cmake --build . -j 16
d:\tmp\build\qt-creator-opensource-src-7.0.2-build> cmake --install . --prefix C:\dev\tools\QtCreator-7.0.2\
d:\tmp\build\qt-creator-opensource-src-7.0.2-build> cmake --install . --prefix C:\dev\tools\QtCreator-7.0.2\ --component Dependencies

Если всё прошло успешно – поздравляю, но у меня на последнем этапе возникла вот такая проблема:

'C:/dev/tools/python-3.9.7/python.exe' 'D:/tmp/build/qt-creator-opensource-src-7.0.2/scripts/deployqt.py' 'C:\dev\tools\QtCreator-7.0.2\/bin/qtcreator' 'C:/dev/10.3.0/x64/Qt/5.15.4/shared/bin/qmake.exe'
Traceback (most recent call last):
  File "D:\tmp\build\qt-creator-opensource-src-7.0.2\scripts\deployqt.py", line 41, in <module>
    import common
ModuleNotFoundError: No module named 'common'

Патчу скрипт qt-creator-opensource-src-7.0.2\scripts\deployqt.py
Было

import argparse
import collections
import os
import locale
import sys
import subprocess
import re
import shutil
from glob import glob

import common

Стало

import argparse
import collections
import os
import locale
import sys
import subprocess
import re
import shutil
from glob import glob

sys.path.append(os.path.dirname(os.path.abspath(__file__)))
import common

Запускаю повторно.

d:\tmp\build\qt-creator-opensource-src-7.0.2-build> cmake --install . --prefix C:\dev\tools\QtCreator-7.0.2\ --component Dependencies
Всё 🙂

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *