mafulechka
21 лютого 2020 р. 16:03

Тепер Qt можна переміщувати!

Починаючи з версії 5.14.0 Qt, можна переміщати , тобто можна перенести установку Qt в іншу директорію, не порушуючи функціональність і не завантажуючи плагіни.


Що це означає для мене?

Давайте перейдемо до ролі майстра збірки Qt у проекті Windows. Ви той, хто знає всі налаштування аргументів напам'ять. Ви знаєте, який гвинтик оптимізації повернути, а яку непотрібну функцію вимкнути.
Ваша збірка Qt ідеально адаптована до проекту, і ви надаєте zip-файл, що містить Qt.

  1. configure -prefix C:/Qt/5.12.6 ...more options...
  2. jom
  3. jom install
  4. zip -r X:\shared_stuff\qt-5.12.6.zip C:\Qt\5.12.6

Потім ваші товариші по команді витягують архів в те саме місце, і все працює відмінно.
Тепер, з будь-якої причини, Joe Developer повинен розпакувати інсталяцію Qt в будь-якій іншій drive/directory (директорію).
Qt у цій іншій директорії не працює. QMake не працюватиме належним чином. Плагіни не можуть бути завантажені. Asset'и Qt не знайдено.

Чому все зламалося?

Історично, конфігурація Qt вбудовувала директорію установки у виконуваному файлі qmake та бібліотеку Qt5Core. Логіка в QLibraryInfo намагається знайти плагіни, asset'и та mkspecs під жорстко заданим префіксом, який завжди є тим, що ви передали для налаштування з аргументом -prefix.

А Qt 5.14 переміщення директорії установки працює?

О так! Починаючи з Qt 5.14.0, префікс установки може автоматично визначатися розташуванням бібліотеки Qt5Core або самого виконуваного файлу без використання жорстко заданих шляхів.
Цей автоматизм контролюється тоді, коли Qt конфігурується через функцію переміщення .
Ця функція увімкнена за умовчанням для нестатичних збірок Qt.
Якщо вам потрібна статична збірка, увімкніть цю функцію вручну:

  1. onfigure -static -feature-relocatable ...

Застереження про статичні зборки, що переміщуються, полягає в тому, що внутрішні переклади Qt не обробляються автоматично.
Вам потрібно буде розгорнути Qt файли разом з вашим додатком.
Ця відмінність від збірки, що не переміщується, є причиною того, що переміщення відключено за умовчанням для статичних збірок.

Якщо мені це не подобається, чи можу я вимкнути цю функцію?

Звичайно, ви можете.

  1. configure -no-feature-relocatable ...

поверне стару поведінку.
Наприклад, дистрибутиви Linux не потребують Qt і можуть відключити цю функцію.

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
  • Останні коментарі
  • Evgenii Legotckoi
    16 квітня 2025 р. 17:08
    Благодарю за отзыв. И вам желаю всяческих успехов!
  • IscanderChe
    12 квітня 2025 р. 17:12
    Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
  • AK
    01 квітня 2025 р. 11:41
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    09 березня 2025 р. 21:02
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    09 березня 2025 р. 16:14
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…