Мотивация
До присоединения Qt Group к санкциям, для установки Qt Framework and Tools было достаточно скачать Qt Online Installer, ввести данные учетной записи и выбрать интересующие компоненты в меню. Ныне приходится выбирать из нескольких вариантов установки: прибегнуть к помощи одного из пакетных менеджеров или собрать из исходников. У каждого варианта есть свои плюсы и минусы. В этой статье рассмотрим установку через Conan - один из наиболее популярных пакетных менеджеров для с++ .
Целевая операционная система: Windows 10
Шаг 0. Установка компилятора
Скачиваем с официального сайта VisualStudio Community
https://visualstudio.microsoft.com/ru/downloads/
Запускаем инсталлятор (для работы понадобится набор «Разработка классических приложений С++»)
Шаг 1. Скачать QtCreator и создать проект
QtCreator можно получить из github репозитория https://github.com/qt-creator/qt-creator/releases/tag/v15.0.1
Распаковать архив с бинарниками можно в любую удобную для работы директорию.
В поддиректории qtcreator-windows-x64-msvc-15.0.0\bin будет лежать исполняемый файл qtcreator.exe
Запускаем QtCreator и создаем проект, например: conan_qml.
Закрываем QtCreator
Шаг 2. Установка python и pip
Забираем очередной релиз с официального сайта https://www.python.org/downloads/
Выбираем кастомную установку
Проверяем, что будет установлен pip
Жмем next, запускаем установку, ждем завершение установки.
Добавляем путь к дирректории с python (у меня это C:\Program Files\Python312) в переменную окружения PATH. Должно получиться как-то так:
Шаг 2. Установка и настройка conan
Ставим пакетный менеджер conan через пакетный менеджер pip :)
pip install conan==2.10.2
Проверяем что conan доступен:
conan -v
Conan version 2.10.2
Настраиваем профиль conan:
conan profile detect -f
detect_api: Found msvc 17
Detected profile:
[settings]
arch=x86_64
build_type=Release
compiler=msvc
compiler.cppstd=14
compiler.runtime=dynamic
compiler.version=194
os=Windows
Профиль будет сохранен в директории C:\Users\Имя пользователя\.conan2\profiles\default
Шаг 3. Получение библиотек
Переходим в директорию conan_qml. Открываем cmd в этой директории (в адресной строке проводника стирается путь, вводится три буквы cmd, нажимается клавиша enter).
Проверяем какие версии Qt доступны (сейчас доступны версии начиная с 5.15.6 до qt/6.7.3):
conan search qt
Мне нужна версия qt/5.15.12, поэтому будем устанавливать её.
Создаем файл conanfile.py в директории conan_qml
from conan import ConanFile
from conan.tools.cmake import CMakeToolchain, CMake, cmake_layout, CMakeDeps
import os
class ExampleRecipe(ConanFile):
generators = "CMakeDeps", "CMakeToolchain"
# Binary configuration
settings = "os", "compiler", "build_type", "arch"
options = {"shared": [True, False], "fPIC": [True, False]}
default_options = {"shared": False, "fPIC": True}
def requirements(self):
self.requires("qt/5.15.12")
def layout(self):
self.folders.build = "cmake-build-{}".format(str(self.settings.build_type).lower())
self.folders.generators = os.path.join(os.path.curdir, "conan_find_libs")
self.cpp.build.libdirs = os.path.join(self.folders.generators, "lib") # write the .libs to the library folder under build
self.cpp.build.bindirs = os.path.join(self.folders.generators, "bin") # write the .dll to the bin folder under build
self.folders.imports = self.folders.build
self.folders.source = "src"
# Настраиваем опции пакетов
def configure(self):
# Oбщие настройки
self.options["qt"].shared = True
def source(self):
# In the source method, the current directory == self.source_folder
assert self.source_folder == os.getcwd()
# copy the libs to build/bin and build/lib folders
def generate(self):
print("CWD", os.getcwd())
print("SOURCE", self.source_folder)
print("BUILD", self.build_folder)
print("BUILD2", self.cpp.build)
print("LIBDIRS", self.cpp.build.libdirs)
print("BINDIRS", self.cpp.build.bindirs)
def package(self):
cmake = CMake(self)
cmake.install()
def deploy(self):
self.copy(self, "*", src=self.package_folder, dst=self.deploy_folder)
Следует обратить внимание на строку:
self.folders.generators = os.path.join(os.path.curdir, "conan_find_libs")
Тут указано куда будут помещены будущие cmake файлы для поиска пакетов.
Запускаем установку библиотек с флагами определяющими:
- тип сборки ( build_type=Release\Debug);
- запуск сборки бинарников локально, если их нет на сервере (--build=missing);
- директория для размещения бинарных файлов (--deployer=full_deploy).
conan install . -s build_type=Debug --build=missing --deployer=full_deploy
Какое-то время conan будет искать подходящие зеркала:
qt/5.15.12: WARN: network: Error downloading file https://download.qt.io/official_releases/qt/5.15/5.15.12/single/qt-everywhere-opensource-src-5.15.12.tar.xz: 'HTTPSConnectionPool(host='download.qt.io', port=443): Max retries exceeded with url: /official_releases/qt/5.15/5.15.12/single/qt-everywhere-opensource-src-5.15.12.tar.xz (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x0000024FF62CB890>, 'Connection to download.qt.io timed out. (connect timeout=30)'))'
qt/5.15.12: Waiting 5 seconds to retry...
После завершения сборки и установки пакетов, в директории full_deploy будут лежать собранные библиотеки, в conan_find_libs будут лежать конфигурационные файлы для cmake.
Добавляем полный путь до full_deploy в переменную PATH.
Шаг 5. Собрать “Hello qt\qml”
Возвращаемся в дирректорию conan_qml. Копируем файл CmakePresets.json из поддиректории conan_find_libs, в текущую директорию проекта conan_qml.
Открываем в QtCreator наш проект. В настройках проекта добавляем пресет.
После завершения конфигурации проекта, можно запустить наш «Hello qt qml»
Заключение.
Предложенный способ установки Qt относительно прост, но имеет и свои недостатки:
некоторых компонентов Qt нет в репозитории Conan.io, придется собирать отдельно;
Не удалось, быстро собрать Qt из Conan c помощью mingw64, сборка зависимостей завершается с ошибкой.
В следующей части будем разбираться с установкой Qt через pacman.