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