Spec-Zone.ru › Qt 5.12

Создание с помощью CMake

CMake — это инструмент, который помогает упростить процесс сборки проектов разработки на разных платформах. CMake автоматизирует создание систем сборки, таких как Makefiles и файлы проектов Visual Studio.

CMake — это инструмент сторонних разработчиков со своей документацией. Остальная часть этого раздела описывает особенности использования Qt 5 с CMake. Минимальная требуемая версия для использования Qt5 — CMake 3.1.0.

Начало работы

Первое требование при использовании CMake — использование find_package для поиска библиотек и заголовочных файлов, поставляемых с Qt. Эти библиотеки и заголовочные файлы могут затем использоваться для построения библиотек и приложений на основе Qt.

Рекомендуемый способ использования библиотек и заголовочных файлов Qt с CMake — использование команды target_link_libraries. Эта команда автоматически добавляет соответствующие каталоги заголовков, определения компиляции, флаг независимого от позиции кода и ссылки на библиотеку qtmain.lib в Windows.

Для построения исполняемого файла GUI helloworld типичное использование:

cmake_minimum_required(VERSION 3.1.0)

project(testproject)

# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed
set(CMAKE_AUTOMOC ON)
# Create code from a list of Qt designer ui files
set(CMAKE_AUTOUIC ON)

# Find the QtWidgets library
find_package(Qt5 COMPONENTS Widgets REQUIRED)

# Populate a CMake variable with the sources
set(helloworld_SRCS
    mainwindow.ui
    mainwindow.cpp
    main.cpp
)
# Tell CMake to create the helloworld executable
add_executable(helloworld WIN32 ${helloworld_SRCS})
# Use the Widgets module from Qt 5
target_link_libraries(helloworld Qt5::Widgets)

Для успешного выполнения find_package, Qt 5 должен быть найден в CMAKE_PREFIX_PATH или параметр Qt5_DIR в кэше CMake должен быть установлен в расположение файла Qt5Config.cmake. Самый простой способ использовать CMake — установить переменную среды CMAKE_PREFIX_PATH в префикс установки Qt 5.

Параметр CMAKE_AUTOMOC автоматически запускает moc при необходимости. Более подробную информацию об этой функции см. в документации CMake AUTOMOC

Импортированные цели

Для каждого модуля Qt создаются импортированные цели. Для использования в командах CMake, таких как target_link_libraries, следует отдавать предпочтение именам импортированных целей вместо использования переменной, например, Qt5<Module>_LIBRARIES. Фактический путь к библиотеке можно получить, используя свойство LOCATION:

find_package(Qt5 COMPONENTS Core REQUIRED)

get_target_property(QtCore_location Qt5::Core LOCATION)

Однако, в коде CMake редко требуется полный путь к библиотеке. Большинство API CMake знают об импортированных целях и могут автоматически использовать их вместо полного пути.

Каждый модуль в Qt 5 имеет целевую библиотеку с именем Qt5::<Module>, которая может использоваться для этой цели.

Импортированные цели создаются с конфигурациями, с которыми был сконфигурирован Qt. То есть, если Qt был сконфигурирован с флагом -debug, будет создана импортированная цель с конфигурацией DEBUG. Если Qt был сконфигурирован с флагом -release, будет создана импортированная цель с конфигурацией RELEASE. Если Qt был сконфигурирован с флагом -debug-and-release (по умолчанию в Windows), импортированные цели будут созданы с конфигурациями RELEASE и DEBUG.

Если в вашем проекте есть пользовательские конфигурации сборки CMake, может потребоваться установить соответствие между вашей пользовательской конфигурацией и конфигурацией Qt, debug или release.

find_package(Qt5 COMPONENTS Core REQUIRED)

set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_RELEASE} -fprofile-arcs -ftest-coverage")

# set up a mapping so that the Release configuration for the Qt imported target is
# used in the COVERAGE CMake configuration.
set_target_properties(Qt5::Core PROPERTIES MAP_IMPORTED_CONFIG_COVERAGE "RELEASE")

Плагины также доступны как цели IMPORTED в CMake. Модули Qt Network, Qt SQL, Qt GUI и Qt Widgets имеют связанные плагины. Они предоставляют список плагинов в переменной Qt5<Module>_PLUGINS.

foreach(plugin ${Qt5Network_PLUGINS})
  get_target_property(_loc ${plugin} LOCATION)
  message("Plugin ${plugin} is at location ${_loc}")
endforeach()

Справочник по переменным

Переменные модулей

Результат вызова find_package — создание импортированных целей для использования с target_link_libraries, заполнение некоторых переменных информацией, необходимой для конфигурации сборки, и предоставление доступных макросов. Имя импортированной цели для каждого модуля соответствует имени модуля с префиксом «Qt5::», например, Qt5::Widgets. Все переменные, специфичные для пакета, имеют согласованное имя с префиксом имени пакета. Например, find_package(Qt5 COMPONENTS Widgets) сделает доступными следующие переменные, если они успешно найдены:

  • Qt5Widgets_VERSION Строка, описывающая версию модуля.
  • Qt5Widgets_LIBRARIES Список библиотек для использования с командой target_link_libraries.
  • Qt5Widgets_INCLUDE_DIRS Список каталогов для использования с командой include_directories.
  • Qt5Widgets_DEFINITIONS Список определений для использования с add_definitions.
  • Qt5Widgets_COMPILE_DEFINITIONS Список определений для использования с свойством COMPILE_DEFINITIONS целевой библиотеки.
  • Qt5Widgets_FOUND Булево значение, описывающее успешность поиска модуля.
  • Qt5Widgets_EXECUTABLE_COMPILE_FLAGS Строка флагов, используемых при построении исполняемых файлов.

Эквивалентные переменные будут доступны для всех пакетов, найденных с помощью find_package вызова. Обратите внимание, что переменные чувствительны к регистру.

Переменные установки

Кроме того, доступны несколько других переменных, которые не относятся к конкретному пакету, а к самой установке Qt.

  • QT_VISIBILITY_AVAILABLE Булево значение, описывающее, была ли построена Qt с скрытой видимостью.
  • QT_LIBINFIX Строка, содержащая инфикс, используемый в именах библиотек.

Справочник по макросам

Макросы Qt5Core

Макросы, доступные при поиске Qt5Core.

Макрос Описание
qt5_wrap_cpp(outfiles inputfile ... OPTIONS ...) Создает код moc из списка файлов, содержащих классы Qt с объявлением Q_OBJECT. Также добавляются определения препроцессора для каждого каталога. Можно передать опции для moc, такие как те, что вы получаете при выполнении «moc -help».
qt5_add_resources(outfiles inputfile ... OPTIONS ...) Создает код из списка файлов ресурсов Qt. Можно передать опции для rcc, такие как те, что вы получаете при выполнении «rcc -help».
qt5_add_binary_resources(target inputfile ... OPTIONS ... DESTINATION ...) Создает файл RCC из списка файлов ресурсов Qt. Можно передать опции для rcc, такие как те, что вы получаете при выполнении «rcc -help». Можно указать путь назначения для использования другого имени файла или пути для файла RCC.
qt5_generate_moc(inputfile outputfile ) Создает правило для выполнения moc на infile и создания outfile. Используйте это, если по какой-то причине QT5_WRAP_CPP() не подходит, например, если вам нужно пользовательское имя файла для файла moc или что-то подобное.
qt5_use_modules(target [LINK_PUBLIC|LINK_PRIVATE] module ... ) Указывает, что целевой объект использует указанные модули Qt 5. Целевой объект будет связан с указанными модулями, будут использоваться каталоги заголовков, установленные этими модулями, определения COMPILE_DEFINITIONS, установленные этими модулями, и флаги COMPILE_FLAGS, установленные модулями. Можно необязательно указать спецификаторы LINK_PRIVATE или LINK_PUBLIC. Если указан LINK_PRIVATE, то модули не станут частью интерфейса связи целевого объекта. Подробнее см. документацию по target_link_libraries.

Обратите внимание, что этот макрос доступен только при использовании CMake 2.8.9 или более поздней версии. Этот макрос устарел. Используйте target_link_libraries с импортированными целями вместо этого.

Макросы Qt5Widgets

Макросы, доступные при поиске Qt5Widgets.

Макрос Описание
qt5_wrap_ui(outfiles inputfile ... OPTIONS ...) Создает код из списка файлов Qt designer ui. Можно передать опции для uic, такие как те, что вы получаете при выполнении «uic -help»

Макросы Qt5DBus

Макросы, доступные при поиске Qt5DBus.

Макрос Описание
qt5_add_dbus_interface(outfiles interface basename) Создает заголовочный файл и файл реализации интерфейса с заданным базовым именем из заданного xml-файла интерфейса и добавляет его в список исходных файлов
qt5_add_dbus_interfaces(outfiles inputfile ... ) Создает заголовочные файлы и файлы реализации интерфейсов для всех перечисленных xml-файлов интерфейсов, имя будет автоматически определено из имени xml-файла
qt5_add_dbus_adaptor(outfiles xmlfile parentheader parentclassname [basename] [classname]) Создает адаптер dbus (заголовочный файл и файл реализации) из xml-файла, описывающего интерфейс, и добавляет его в список исходных файлов. Адаптер пересылает вызовы родительскому классу, определенному в parentheader и именованному parentclassname. Имя сгенерированных файлов будет <basename>adaptor.{cpp,h}, где basename по умолчанию соответствует базовому имени xml-файла. Если <classname> предоставлен, он будет использован в качестве имени класса адаптера.
qt5_generate_dbus_interface( header [interfacename] OPTIONS ...) Генерирует xml-файл интерфейса из заданного заголовочного файла. Если необязательный аргумент interfacename опущен, имя файла интерфейса создается из базового имени заголовочного файла с добавленным суффиксом .xml. Можно передать опции для qdbuscpp2xml, например, те, которые вы получаете при выполнении «qdbuscpp2xml --help»

Макросы Qt5LinguistTools

Макросы, доступные при поиске Qt5LinguistTools.

Макрос Описание
qt5_create_translation( qm_files directories ... sources ... ts_files ... OPTIONS ...) Выход: qm_files Вход: Каталоги источники ts_files Опции: флаги, передаваемые в lupdate, например, -extensions для указания расширений при сканировании каталогов. Генерирует команды для создания файлов .ts (через lupdate) и .qm (через lrelease) из каталогов и/или источников. Файлы .ts создаются или обновляются в исходном дереве (если не указаны полные пути). Файлы .qm генерируются в дереве сборки. Обновление переводов может быть выполнено путем добавления qm_files в список исходных файлов вашей библиотеки/исполняемого файла, чтобы они всегда обновлялись, или путем добавления пользовательской цели для управления временем их обновления/генерации.
qt5_add_translation( qm_files ts_files ... ) Выход: qm_files Вход: ts_files Генерирует команды для создания .qm из .ts-файлов. Имена сгенерированных файлов можно найти в qm_files. Файлы ts_files должны существовать и не обновляются.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/cmake-manual.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API