Spec-Zone.ru › CMake

FindQt4

Находит Qt4 — кроссплатформенный фреймворк для разработки приложений с графическим пользовательским интерфейсом:

find_package(Qt4 [<version>] [...])

Этот модуль определяет ряд импортируемых целей, макросов и переменных для использования Qt4 в проекте.

Примечание

Этот модуль предназначен для Qt версии 4. Начиная с Qt версии 5, Qt также предоставляет экспортируемую конфигурацию для поиска Qt. В новом коде следует использовать cmake-qt(7), а не этот модуль.

Для обнаружения пакета Qt4 требуется инструмент qmake из Qt, который должен быть доступен в системном пути.

Примечание

При использовании импортируемых целей статическая библиотека qtmain.lib автоматически подключается в Windows для исполняемых файлов WIN32. Чтобы отключить это глобально, задайте переменную QT4_NO_LINK_QTMAIN перед поиском Qt4. Чтобы отключить это для конкретного исполняемого файла, задайте для него свойство цели QT4_NO_LINK_QTMAIN значение TRUE.

Инструменты сборки Qt

Qt использует некоторые встроенные инструменты для генерации кода, например moc для генерации кода метаобъектов, uic для компоновки и заполнения виджетов, а также rcc для генерации содержимого виртуальной файловой системы. Эти инструменты могут автоматически запускаться командой cmake(1), если выполнены соответствующие условия. Подробнее см. в разделе cmake-qt(7).

Импортируемые цели

Библиотеки Qt можно подключать с помощью соответствующей им импортируемой цели командой target_link_libraries():

target_link_libraries(myexe Qt4::QtGui Qt4::QtXml)

Подключение импортируемой цели автоматически задаёт правильные каталоги включаемых файлов и определения компиляции при сборке myexe.

Импортируемые цели также управляют своими зависимостями, поэтому указывать Qt4::QtCore не нужно, если от неё зависит другая библиотека Qt. Аналогично, Qt4::QtGui автоматически включается при подключении Qt4::QtDeclarative. Наличие целей можно проверять с помощью команды if(TARGET).

Если доступны отладочная и релизная версии библиотеки Qt, CMake выбирает подходящую в зависимости от конфигурации сборки.

Если найдены, этот модуль предоставляет следующие импортируемые цели:

Qt4::QtCore

Цель QtCore

Qt4::QtGui

Цель QtGui

Qt4::Qt3Support

Цель Qt3Support

Qt4::QtAssistant

Цель QtAssistant

Qt4::QtAssistantClient

Цель QtAssistantClient

Qt4::QAxContainer

Цель QAxContainer (только для Windows)

Qt4::QAxServer

Цель QAxServer (только для Windows)

Qt4::QtDBus

Цель QtDBus

Qt4::QtDeclarative

Цель QtDeclarative

Qt4::QtDesigner

Цель QtDesigner

Qt4::QtDesignerComponents

Цель QtDesignerComponents

Qt4::QtHelp

Цель QtHelp

Qt4::QtMotif

Цель QtMotif

Qt4::QtMultimedia

Цель QtMultimedia

Qt4::QtNetwork

Цель QtNetwork

Qt4::QtNsPlugin

Цель QtNsPlugin

Qt4::QtOpenGL

Цель QtOpenGL

Qt4::QtScript

Цель QtScript

Qt4::QtScriptTools

Цель QtScriptTools

Qt4::QtSql

Цель QtSql

Qt4::QtSvg

Цель QtSvg

Qt4::QtTest

Цель QtTest

Qt4::QtUiTools

Цель QtUiTools

Qt4::QtWebKit

Цель QtWebKit

Qt4::QtXml

Цель QtXml

Qt4::QtXmlPatterns

Цель QtXmlPatterns

Qt4::phonon

Цель phonon

Переменные результата

Этот модуль определяет следующие переменные:

Qt4_FOUND

Логическое значение, указывающее, найдена ли Qt4 (запрошенной версии).

QT_FOUND

То же, что и Qt4_FOUND. Логическое значение, указывающее, найдена ли Qt4 (запрошенной версии). Эта переменная доступна для совместимости с другими модулями поиска Qt.

QT_VERSION_MAJOR

Основная версия найденной Qt.

QT_VERSION_MINOR

Дополнительная версия найденной Qt.

QT_VERSION_PATCH

Версия исправления найденной Qt.

Подсказки

QT4_NO_LINK_QTMAIN

Если перед поиском Qt4 задано логическое значение true, глобально отключает подключение статической библиотеки qtmain.lib в Windows.

Макросы

В некоторых случаях может быть необходимо или полезно запускать инструменты сборки Qt более вручную. Этот модуль предоставляет следующие макросы для добавления целей с такими задачами:

qt4_wrap_cpp

Создаёт правила сборки для запуска moc со списком входных файлов:

qt4_wrap_cpp(<variable> <files>... [TARGET <target>] [OPTIONS <options>...])

Этот макрос создаёт правила сборки для обработки списка входных файлов <files>, содержащих классы Qt с объявлением Q_OBJECT. Также добавляются определения препроцессора для каждого каталога.

<variable>

Имя переменной, в которой хранится список сгенерированных выходных файлов.

<files>

Один или несколько входных файлов исходного кода.

TARGET

Если указан, свойства цели INTERFACE_INCLUDE_DIRECTORIES и INTERFACE_COMPILE_DEFINITIONS из <target> передаются в moc.

OPTIONS

Необязательный список параметров для moc, например тех, которые используются при выполнении moc -help.

Примечание

Вместо использования qt4_wrap_cpp() можно задать переменную CMAKE_AUTOMOC, чтобы автоматически обрабатывать файлы исходного кода с помощью moc.

qt4_wrap_ui

Создаёт правила сборки для запуска uic со списком входных файлов интерфейса Qt Designer:

qt4_wrap_ui(<variable> <files>... [OPTIONS <options>...])
<variable>

Имя переменной, в которой хранится список имён сгенерированных выходных файлов.

<files>

Один или несколько входных файлов интерфейса Qt Designer.

OPTIONS

Необязательный список параметров для uic, например тех, которые используются при выполнении uic -help.

Примечание

Вместо использования qt4_wrap_ui() можно задать переменную CMAKE_AUTOUIC, чтобы автоматически обрабатывать файлы интерфейса с помощью uic.

qt4_add_resources

Создаёт правила сборки для запуска rcc со списком входных файлов ресурсов Qt:

qt4_add_resources(<variable> <files>... [OPTIONS <options>...])
<variable>

Имя переменной, в которой хранится список имён сгенерированных выходных файлов.

<files>

Один или несколько входных файлов ресурсов Qt.

OPTIONS

Необязательный список параметров для rcc, например тех, которые используются при выполнении rcc -help.

Примечание

Вместо использования qt4_add_resources() можно задать переменную CMAKE_AUTORCC, чтобы автоматически обрабатывать файлы ресурсов с помощью rcc.

qt4_generate_moc

Создаёт правило сборки, которое генерирует выходной файл, запуская moc для заданного входного файла.

qt4_generate_moc(<input-file> <output-file> [TARGET <target>])

Этот макрос создаёт правило сборки для запуска <input-file> с целью генерации <output-file>. Используйте его, если по какой-либо причине применение qt4_wrap_cpp() невозможно, например, когда для файла moc требуется пользовательское имя.

TARGET

Если указаны, свойства цели INTERFACE_INCLUDE_DIRECTORIES и INTERFACE_COMPILE_DEFINITIONS из <target> передаются в moc.

qt4_add_dbus_interface

Создаёт заголовочный файл интерфейса и файлы реализации на основе XML-файла интерфейса:

qt4_add_dbus_interface(<variable> <interface-file> <basename>)

Этот макрос создаёт заголовочный файл интерфейса (<basename>.h) и файлы реализации (<basename>.{cpp,moc}) на основе заданного XML-файла интерфейса <interface-file> и добавляет их в переменную, содержащую список исходных файлов (имя переменной задаётся как <variable>).

Дополнительные параметры можно передать вызову qdbusxml2cpp, задав для входного файла <interface-file> следующие свойства исходного файла:

INCLUDE

Указанный файл будет включён в сгенерированный заголовочный файл интерфейса.

CLASSNAME

Имя сгенерированного класса.

NO_NAMESPACE

Сгенерированный класс не будет помещён в пространство имён.

qt4_add_dbus_interfaces

Создаёт заголовочный файл интерфейса и файлы реализации на основе нескольких XML-файлов интерфейсов:

qt4_add_dbus_interfaces(<variable> <interface-files>...)

Этот макрос создаёт заголовочный файл интерфейса и файлы реализации для всех перечисленных XML-файлов интерфейсов <interface-files>. Базовое имя определяется автоматически по имени XML-файла. Список полученных выходных файлов сохраняется в переменной <variable>.

Здесь также применяются свойства исходного файла, описанные для qt4_add_dbus_interface().

qt4_add_dbus_adaptor

Создаёт класс адаптера для интерфейса D-Bus:

qt4_add_dbus_adaptor(<variable> <xmlfile> <parent-header> <parent-classname>
                     [<basename>] [<classname>])

Создаёт адаптер D-Bus (заголовочный файл и файл реализации) из XML-файла с описанием интерфейса и добавляет его в список исходных файлов. Адаптер перенаправляет вызовы родительскому классу, определённому в <parent-header> и названному <parent-classname>. Имена сгенерированных файлов будут иметь вид <basename>adaptor.{cpp,h}, где <basename> по умолчанию соответствует базовому имени XML-файла. Если задано <classname>, оно будет использоваться как имя класса самого адаптера. Имена сгенерированных файлов сохраняются в переменной <variable>.

qt4_generate_dbus_interface

Создаёт XML-файл интерфейса D-Bus на основе заданного заголовочного файла:

qt4_generate_dbus_interface(<header> [<interface>] [OPTIONS <options>...])

Этот макрос создаёт правило сборки для извлечения объявлений из заданного файла <header> с целью генерации соответствующего XML-файла интерфейса.

<header>

Путь к заголовочному файлу, на основе которого создаётся XML-файл интерфейса.

<interface>

Путь к сгенерированному XML-файлу интерфейса. Если этот необязательный аргумент опущен, имя файла интерфейса формируется из базового имени заголовочного файла с добавлением суффикса .xml. Относительный путь считается относительно CMAKE_CURRENT_BINARY_DIR.

OPTIONS

Список параметров, которые можно передать qdbuscpp2xml, например тех, которые используются при выполнении qdbuscpp2xml --help.

qt4_create_translation

Создаёт правила сборки для генерации файлов TS и QM:

qt4_create_translation(<qm-files-var> <directories>... <sources>...
                       <ts-files>... [OPTIONS <options>...])

Этот макрос создаёт правила сборки для генерации файлов TS (файлов исходных текстов переводов .ts) с помощью lupdate и файлов QM (файлов сообщений Qt .qm) с помощью lrelease на основе заданных <directories> и/или <sources>. Файлы TS создаются и/или обновляются в дереве исходных файлов (если не заданы полные пути). Файлы QM генерируются в дереве сборки.

<qm-files-var>

В этой переменной хранится список сгенерированных файлов QM. Обновление переводов можно выполнять, добавив <qm-files-var> в список исходных файлов библиотеки или исполняемого файла проекта, чтобы они всегда обновлялись, либо добавив пользовательскую цель, которая позволит контролировать время их обновления и генерации.

<directories>

Список каталогов, содержащих файлы исходного кода.

<sources>

Список файлов исходного кода.

<ts-files>

Список файлов TS (Translation Source).

OPTIONS

Необязательный список флагов, передаваемых lupdate, например -extensions для указания расширений файлов при сканировании каталогов.

qt4_add_translation

Создаёт правила сборки для генерации файлов QM из заданных файлов TS:

qt4_add_translation(<qm-files-var> <ts-files>...)

Этот макрос создаёт правила сборки для генерации файлов QM из заданных файлов TS и сохраняет список имён сгенерированных файлов QM в переменной <qm-files-var>. Файлы <ts-files> должны существовать; они никак не обновляются.

qt4_automoc

Устарело с версии 2.8.11: Вместо этого используйте функциональность переменной CMAKE_AUTOMOC.

Запускает moc для входных файлов:

qt4_automoc(<source-files>... [TARGET <target>])

Этот макрос можно использовать для автоматической обработки moc. Например, если имеются файлы foo.h и foo.cpp, а в foo.h класс использует макрос препроцессора Q_OBJECT, для него необходимо запустить moc. Если использовать qt4_wrap_cpp() нежелательно (хотя этот способ надёжен и проверен), #include "foo.moc" можно вставить в foo.cpp, а затем передать foo.cpp в качестве аргумента qt4_automoc(). При этом на этапе конфигурации будут просканированы все перечисленные файлы <source-files> на наличие включённых файлов moc; если они найдутся, будет создано правило для запуска moc во время сборки для соответствующего заголовочного файла foo.h. Если для исходного файла задано свойство SKIP_AUTOMOC, этот макрос пропустит файл.

TARGET

Если указаны, свойства цели INTERFACE_INCLUDE_DIRECTORIES и INTERFACE_COMPILE_DEFINITIONS из <target> передаются в moc.

qt4_use_modules

Устарело с версии 2.8.11: Вместо этого используйте target_link_libraries() с импортируемыми целями.

Предоставляет проекту модули Qt для подключения к цели:

qt4_use_modules(<target> [<LINK_PUBLIC|LINK_PRIVATE>] <modules>...)

Эта функция настраивает <target> для использования <modules> из Qt. Использование модуля Qt подразумевает подключение библиотеки, добавление соответствующих каталогов включаемых файлов модуля и добавление необходимых определений компилятора для работы с модулем. Модули примерно соответствуют компонентам Qt4.

LINK_PUBLIC or LINK_PRIVATE

Необязательный режим подключения, используемый как соответствующий аргумент в вызове target_link_libraries().

Например, вызов qt4_use_modules(myexe Core Gui Declarative) задействует компоненты QtCore, QtGui и QtDeclarative для цели проекта myexe.

Устаревшие переменные

Для обратной совместимости предоставляются следующие переменные:

QT4_FOUND

Устарело с версии 2.8.11: Используйте Qt4_FOUND, имеющую то же значение.

Примеры

Типичный пример поиска Qt4 может выглядеть так:

set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt4 4.4.3 REQUIRED QtGui QtXml)
add_executable(myexe main.cpp)
target_link_libraries(myexe PRIVATE Qt4::QtGui Qt4::QtXml)

© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/module/FindQt4.html

Spec-Zone.ru

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