Сборка QML-приложения с помощью CMake

Добавлено 1 января 2022 в 20:28

В разделе Сборка консольного приложения C++ мы показали файл CMakeLists.txt для простого консольного приложения. Теперь мы расширим его, чтобы создать приложение QML, использующее модуль Qt Quick.

Это полный файл проекта:

cmake_minimum_required(VERSION 3.16)

project(hello VERSION 1.0 LANGUAGES CXX)

set(CMAKE_AUTOMOC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt6 6.2 COMPONENTS Quick Gui REQUIRED)

qt_add_executable(myapp
    main.cpp
)

qt_add_qml_module(myapp
    URI hello
    VERSION 1.0
    QML_FILES
        main.qml
        FramedImage.qml
    RESOURCES
        img/world.png
)

target_link_libraries(myapp PRIVATE Qt6::Gui Qt6::Quick)

Давайте пройдемся по внесенным нами изменениям. Мы указываем CMAKE_AUTOMOC, CMAKE_CXX_STANDARD и CMAKE_CXX_STANDARD_REQUIRED.

set(CMAKE_AUTOMOC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

В вызове find_package мы заменяем Core на Quick. Это найдет модуль Qt6Quick и предоставит цели Qt6::Quick, с которыми мы позже свяжемся.

find_package(Qt6 6.2 COMPONENTS Quick Gui REQUIRED)

Обратите внимание, что приложение по-прежнему будет связываться с Qt6::Core, потому что Qt6::Quick зависит от него.

qt_add_executable создает и дорабатывает цель приложения:

qt_add_executable(myapp
    main.cpp
)

qt_add_qml_module передает цель исполняемого файла, URI, версию модуля и список файлов QML, чтобы гарантировать, что myapp станет модулем QML. Среди прочего, она помещает файлы QML в qrc:/${URI} в файловой системе ресурсов.

qt_add_qml_module(myapp
    URI hello
    VERSION 1.0
    QML_FILES
        main.qml
        FramedImage.qml
    RESOURCES
        img/world.png
)

Во-первых, qt_add_qml_module обеспечивает запуск qmlcachegen. Во-вторых, создается цель myapp_qmllint, которая запускает qmllint для файлов в QML_FILES.

При добавлении ресурсов, на которые есть ссылки, они автоматически добавляются в приложение по тому же корневому пути, что и файлы QML, – также в файловой системе ресурсов. Поддерживая путь в системе ресурсов в соответствии с путем в исходном каталоге и каталоге сборки, мы гарантируем, что изображение всегда будет найдено, поскольку оно разрешается относительно FramedImage.qml. Это относится к образу в файловой системе ресурсов, если мы загружаем оттуда main.qml, или к изображению в реальной файловой системе, если мы просматриваем его с помощью инструмента qml.

В команде target_link_libraries мы линкуемся с Qt6::Quick вместо Qt6::Core.

target_link_libraries(myapp PRIVATE Qt6::Gui Qt6::Quick)

Теги

CMakeQMLQtПрограммированиеСистема сборки

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.