mafulechka
mafulechka23 квітня 2020 р. 04:56

Безверсійні цілі CMake (Qt 5.15)

Розробники Qt працюють над тим, щоб портувати Qt 6 на CMake як внутрішню систему складання. Хоча до Qt 6 ще кілька місяців, ви вже можете побачити деякі переваги цієї роботи Qt 5.15. Крістіан Адам (Cristian Adam) вже писав у блозі про покращення в CMake 3.17 і про те, як, наприклад, покращився AUTOMOC у QT 5.15. Ця стаття про те, як ви можете підготуватися до Qt 6 у проектах CMake.


Оглядаючись назад: з Qt 4 до Qt 5

Хоча Qt 4 - Qt 5 були значною мірою сумісні з вихідним кодом з погляду C++, на жаль, це не стосується самої інтеграції CMake. Іноді вам доводилося адаптувати більшу частину коду CMake у разі інтеграції Qt.

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

Проблема: версійні цілі та команди

Одна очевидна проблема полягає в тому, що в основному всі CMake API (мети, змінні, команди), які надає Qt, містять у назві основну версію Qt. Це правда навіть для дуже простих прикладів:

cmake_minimum_required(VERSION 3.5)
project(hellotr LANGUAGES CXX)

find_package(Qt5 COMPONENTS Widgets LinguistTools REQUIRED)
qt5_add_translation(QM_FILES hellotr_en.ts)
add_executable(hellotr
  main.cpp
  ${QM_FILES}
)
target_link_libraries(hellotr Qt5::Widgets)

Тепер ви можете стверджувати, що, за умови, що фактична семантика не змінюється, заміна всіх викликів Qt5::, qt5_ у файлі CMake на Qt6::, qt6_ досить проста. Однак це не допоможе вам, якщо ви хочете якийсь час підтримувати Qt 5 та Qt 6.

Безверсійні цілі та команди

Отже, дозвольте вам представити нові безверсійні цілі та команди Qt 5.15. Наведений вище приклад можна записати так:

cmake_minimum_required(VERSION 3.5)
project(hellotr LANGUAGES CXX)

find_package(Qt5 5.15 COMPONENTS Widgets LinguistTools REQUIRED)
qt_add_translation(QM_FILES hellotr_en.ts)
add_executable(hellotr
  main.cpp
  ${QM_FILES}
)
target_link_libraries(hellotr Qt::Widgets)

За винятком виклику find_package, це має працювати і для Qt 6.

Якщо вас цікавить додатковий аргумент 5.15 для find_package: це дозволяє CMake вивести помилку з відповідним повідомленням про помилку, якщо ваша версія Qt старша за Qt 5.15.

Ви можете відмовитися від цих нових цілей та команд, встановивши змінні QT_NO_CREATE_VERSIONLESS_TARGETS або QT_NO_CREATE_VERSIONLESS_FUNCTIONS перед find_package. Це корисно, наприклад, якщо ви вже визначили їх самі або, якщо ви все ще хочете отримати доступ до qt_wrap_cpp Qt 3.

Змішування Qt 5 і Qt 6

Дозвольте почати з великого застереження: Qt не підтримує змішування різних версій Qt в одному додатку! У будь-якому випадку, існують розширені варіанти використання, в яких можна створити окремі артефакти, використовуючи Qt 5 і Qt 6 в одному проекті.

Для цих випадків можна встановити для нової змінної QT_DEFAULT_MAJOR_VERSION значення 5 або 6. Якщо ця змінна встановлена перед викликом find_package, що завантажує Qt 5 або Qt 6, безверсійні функції використовуватимуть логіку з відповідної версії Qt.

Перспективи на майбутнє

З наближенням першого випуску Qt 5.15 розробники все більше і більше консервативно стосуватимуться існуючої інфраструктури CMake в цій версії. У будь-якому випадку, планується ще покращити документацію про те, чи продуктивніше використовувати CMake з Qt.

У Qt 6 побачимо набагато більше API, щоб не тільки використовувати модулі Qt, але й те, як визначати ваші власні модулі Qt та плагіни.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

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

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
m
  • molni99
  • 26 жовтня 2024 р. 01:37

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:80бали,
  • Рейтинг балів4
m
  • molni99
  • 26 жовтня 2024 р. 01:29

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:20бали,
  • Рейтинг балів-10

C++ - Тест 003. Условия и циклы

  • Результат:42бали,
  • Рейтинг балів-8
Останні коментарі
A
ALO1ZE19 жовтня 2024 р. 08:19
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов05 жовтня 2024 р. 07:51
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas505 липня 2024 р. 11:02
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr08 лютого 2024 р. 18:43
Qt Linux - Урок 001. Автозапуск програми Qt під Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий Кононенко05 лютого 2024 р. 01:50
Qt WinAPI - Урок 007. Робота з ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Тепер обговоріть на форумі
jd
jasmine disouza28 жовтня 2024 р. 04:58
GeForce Now India: Unlocking the Future of Cloud Gaming GeForce Now India has a major impact on the gaming scene by introducing NVIDIA's cloud gaming service to Indian gamers. GeForce Now India lets you stream top-notch PC games on any device, from b…
9
9Anonim25 жовтня 2024 р. 09:10
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
J
JacobFib17 жовтня 2024 р. 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
ИМ
Игорь Максимов03 жовтня 2024 р. 04:05
Реализация навигации по разделам Спасибо Евгений!
JW
Jhon Wick01 жовтня 2024 р. 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…

Слідкуйте за нами в соціальних мережах