MyTetra Share
Делитесь знаниями!
Как переключать версию Qt в Linux, если используется Qt4 и Qt5?
Время создания: 29.05.2025 12:25
Текстовые метки: linux, debian, astra, qt, qt4, qt5, версия, переключить, выбрать, компиляция, сборка, qmake, qtchooser
Раздел: Компьютер - Программирование - Язык C++ (Си++) - Библиотека Qt - Инсталляция Qt и сборка проектов
Запись: xintrea/mytetra_syncro/master/base/17485107295288cgvlww/text.html на raw.github.com

В некоторых дистрибутивах Linux, например в Astra Linux 1.6, по-умолчанию ставится пакет qtchooser, который должен помогать в выборе версии Qt, с которой происходит сборка Qt-программы из исходников.


Признаком того, что выбор Qt в системе происходит через qtchooser является тот факт, что утилита qmake представляет собой ссылку на qtchooser:



> whereis qmake

qmake: /usr/bin/qmake


> ls /usr/bin/qmake -la

lrwxrwxrwx 1 root root /usr/bin/qmake -> qtchooser



Узнать, какая версия Qt выбрана в данный момент, можно командой:



> qtchooser -print-env

QT_SELECT="qt5"

QTTOOLDIR="/usr/lib/qt5/bin"

QTLIBDIR="/usr/lib/x86_64-linux-gnu"



Узнать, какие версии Qt видит в системе qtchooser, можно командой:



> qtchooser -l

4

5

default

qt4-x86_64-linux-gnu

qt4

qt5-x86_64-linux-gnu

qt5



Где qtchooser хранит свои настройки?


Для своей работы программа qtchooser хранит *.conf - файлы в различных местах системы. Вот примерный список того, где могут находиться каталоги с файлами *.conf, в которых хранятся настройки версий Qt:



~/.config/qtchooser

/etc/xdg/qtchoose

/usr/share/qtchooser

/usr/lib/x86_64-linux-gnu/qtchooser

/usr/lib/x86_64-linux-gnu/qt-default/qtchooser



Часто в системе создаются настройки в виде символьных ссылок на другие настройки:



$ ls -la /usr/share/qtchooser

-rw-r--r-- root root qt4-x86_64-linux-gnu.conf

-rw-r--r-- root root qt5-x86_64-linux-gnu.conf


$ ls -la /usr/lib/x86_64-linux-gnu/qtchooser

lrwxrwxrwx root root 4.conf -> ../../../share/qtchooser/qt4-x86_64-linux-gnu.conf

lrwxrwxrwx root root 5.conf -> ../../../share/qtchooser/qt5-x86_64-linux-gnu.conf

lrwxrwxrwx root root default.conf -> ../../../share/qtchooser/qt5-x86_64-linux-gnu.conf

lrwxrwxrwx root root qt4.conf -> ../../../share/qtchooser/qt4-x86_64-linux-gnu.conf

lrwxrwxrwx root root qt5.conf -> ../../../share/qtchooser/qt5-x86_64-linux-gnu.conf



Принцип следующий - имя файла, без расширения *.conf, считается названием конфигурации Qt. Название конфигурации указывается в переменной QT_SELECT, и согласно этому названию автоматически применяются настройки в момент вызова qmake (который на самом деле qtchooser). Согласно этому имени конфигурации, хранящемуся в QT_SELECT, утилита qtchooser печатает настройки через опцию -print-env, и делает другие вещи.


Формат *.conf - файла для qtchooser следующий:



  • Строка 1 - то что будет помещено в системную переменную QTTOOLDIR.
  • Строка 2 - то что будет помещено в системную переменную QTLIBDIR.



Сами имена переменных не указываются. Вот пример содержимого настроечного файла:



> cat /usr/share/qtchooser/qt4-x86_64-linux-gnu.conf

/usr/lib/x86_64-linux-gnu/qt4/bin

/usr/lib/x86_64-linux-gnu



Как временно в текущей сессии переключить версию Qt?


Временно переключиться на версию Qt 4 можно командой:



> export QT_SELECT=4



Проверка:



> qtchooser -print-env

QT_SELECT="4"

QTTOOLDIR="/usr/lib/x86_64-linux-gnu/qt4/bin"

QTLIBDIR="/usr/lib/x86_64-linux-gnu"


> qmake --version

QMake version 2.01a

Using Qt version 4.8.7 in /usr/lib/x86_64-linux-gnu



Временно переключиться на версию Qt 5 можно командой:



> export QT_SELECT=5



Проверка:



> qtchooser -print-env

QT_SELECT="5"

QTTOOLDIR="/usr/lib/qt5/bin"

QTLIBDIR="/usr/lib/x86_64-linux-gnu"


> qmake --version

QMake version 3.1

Using Qt version 5.11.0 in /usr/lib/x86_64-linux-gnu



Как переключить версию Qt на постоянной основе?


Чтобы выбрать какая версия Qt будет доступна по-умолчанию, надо изменить конфигурацию с именем default.


Если нужно глобально установить версию Qt, то следует создать линк:



/etc/xdg/qtchooser/default.conf



Который должен указывать на настроящий файл необходимой конфигурации. Созданный файл линка приоритетнее, чем файл с таким же именем, но в директории /usr/lib/x86_64-linux-gnu/qtchooser.


Если версию Qt надо установить локально только для одного пользователя, то в домашнем каталоге пользователя следует создать линк:



~/.config/qtchooser/default.conf



Который, все так же, должен указывать на настроящий файл необходимой конфигурации.



Переключение версии Qt через пакетный менеджер


В Astra Linux 1.6 имеется два специальных deb-пакета, которые просто перезаписывают файл /usr/lib/x86_64-linux-gnu/qtchooser/default.conf и являются взаимо-исключающими. После установки такого пакета, дефолтная настройка версии Qt устанавливается на соответвтующую пакету версию.


Имена пакетов следующие:



  • qt4-default
  • qt5-default



Таким образом, если дать команду:



apt-get install qt4-default



То в системе по-умолчанию будет выставлен Qt4.



Как переключить версию Qt в пределах одной команды?


Для этого можно воспользоваться следующим вариантом запуска:



qtchooser -qt=qt5 -run-tool=команда_и_её_параметры



Выполняемую команду можно вводить с пробелами и без кавычек. Например, можно написать так:



qtchooser -qt=qt5 -run-tool=qmake --version




Так же в этом разделе:
 
MyTetra Share v.0.67
Яндекс индекс цитирования