FindQt4

This module finds Qt4, a cross-platform application development framework for creating graphical user interfaces and applications. It defines a number of imported targets, macros, and variables to use Qt4 in the project.

Note

This module is for Qt version 4. As of Qt version 5, the Qt upstream also provides an exported configuration to find Qt. New code should follow the cmake-qt(7) instead of using this module.

To detect the Qt4 package, the Qt4 qmake tool is required and must be available in the system path.

Note

When using Imported Targets, the qtmain.lib static library is automatically linked on Windows for WIN32 executables. To disable this globally, set the QT4_NO_LINK_QTMAIN variable before finding Qt4. To disable this for a particular executable, set the QT4_NO_LINK_QTMAIN target property to TRUE on that executable.

Qt Build Tools

Qt relies on some bundled tools for code generation, such as moc for meta-object code generation, uic for widget layout and population, and rcc for virtual filesystem content generation. These tools may be automatically invoked by cmake(1) if the appropriate conditions are met. See cmake-qt(7) for more.

Imported Targets

Qt libraries can be linked using their corresponding IMPORTED target with the target_link_libraries() command:

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

Linking to an imported target automatically applies the correct include directories and compile definitions when building myexe.

Imported targets also manage their dependencies, so listing Qt4::QtCore is unnecessary if another Qt library depends on it. Likewise, Qt4::QtGui is automatically included when linking Qt4::QtDeclarative. Targets can be checked for existence using if(TARGET) command.

If both debug and release versions of a Qt toolkit library are available, CMake selects the appropriate one based on the build configuration.

This module provides the following imported targets, if found:

Qt4::QtCore

The QtCore target

Qt4::QtGui

The QtGui target

Qt4::Qt3Support

The Qt3Support target

Qt4::QtAssistant

The QtAssistant target

Qt4::QtAssistantClient

The QtAssistantClient target

Qt4::QAxContainer

The QAxContainer target (Windows only)

Qt4::QAxServer

The QAxServer target (Windows only)

Qt4::QtDBus

The QtDBus target

Qt4::QtDeclarative

The QtDeclarative target

Qt4::QtDesigner

The QtDesigner target

Qt4::QtDesignerComponents

The QtDesignerComponents target

Qt4::QtHelp

The QtHelp target

Qt4::QtMotif

The QtMotif target

Qt4::QtMultimedia

The QtMultimedia target

Qt4::QtNetwork

The QtNetwork target

Qt4::QtNsPlugin

The QtNsPlugin target

Qt4::QtOpenGL

The QtOpenGL target

Qt4::QtScript

The QtScript target

Qt4::QtScriptTools

The QtScriptTools target

Qt4::QtSql

The QtSql target

Qt4::QtSvg

The QtSvg target

Qt4::QtTest

The QtTest target

Qt4::QtUiTools

The QtUiTools target

Qt4::QtWebKit

The QtWebKit target

Qt4::QtXml

The QtXml target

Qt4::QtXmlPatterns

The QtXmlPatterns target

Qt4::phonon

The phonon target

Result Variables

This module sets the following variables:

Qt4_FOUND

Boolean whether Qt4 has been found. If false, don't try to use Qt4.

QT_FOUND

Boolean whether Qt4 has been found. If false, don't try to use Qt4. This variable is for compatibility with other Qt find modules.

QT4_FOUND

Boolean whether Qt4 has been found. If false, don't try to use Qt4. This variable is for backward compatibility only.

QT_VERSION_MAJOR

The major version of Qt found.

QT_VERSION_MINOR

The minor version of Qt found.

QT_VERSION_PATCH

The patch version of Qt found.

Hints

QT4_NO_LINK_QTMAIN

If set to boolean true before finding Qt4, it globally disables linking qtmain.lib static library on Windows.

Macros

In some cases it can be necessary or useful to invoke the Qt build tools in a more-manual way. This module provides the following macros to add targets for such uses:

qt4_wrap_cpp

Creates build rules for running moc on a given list of input files:

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

This macro creates build rules for processing a list of input files <files> that contain Qt classes with the Q_OBJECT declaration. Per-directory preprocessor definitions are also added.

<variable>

Name of a variable where a list of generated output files is stored.

<files>

One or more input source files.

TARGET

If specified, the INTERFACE_INCLUDE_DIRECTORIES and INTERFACE_COMPILE_DEFINITIONS target properties from the <target> are passed to moc.

OPTIONS

Optional list of options given to moc, such as those found when executing moc -help.

Note

Instead of using qt4_wrap_cpp(), the CMAKE_AUTOMOC variable can be set to process source files with moc automatically.

qt4_wrap_ui

Creates build rules for running uic on a given list of Qt designer ui input files:

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

Name of a variable where a list of generated output filenames is stored.

<files>

One or more Qt designer ui input source files.

OPTIONS

Optional list of options given to uic, such as those found when executing uic -help.

Note

Instead of using qt4_wrap_ui(), the CMAKE_AUTOUIC variable can be set to process ui files with uic automatically.

qt4_add_resources

Creates build rules for running rcc on a given list of input Qt resource files:

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

Name of a variable where a list of generated output filenames is stored.

<files>

One or more Qt resource input source files.

OPTIONS

Optional list of options given to rcc, such as those found when executing rcc -help.

Note

Instead of using qt4_add_resources(), the CMAKE_AUTORCC variable can be set to process resource files with rcc automatically.

qt4_generate_moc

Creates a build rule that generates output file by running moc on a given input file.

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

This macro creates a build rule for <input-file> to generate <output-file>. Use this if for some reason qt4_wrap_cpp() isn't feasible, e.g. because a custom filename is needed for the moc file or similar.

TARGET

If specified, the INTERFACE_INCLUDE_DIRECTORIES and INTERFACE_COMPILE_DEFINITIONS target properties from the <target> are passed to moc.

qt4_add_dbus_interface

Creates the interface header and implementation files from an interface XML file:

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

This macro creates the interface header (<basename>.h) and implementation files (<basename>.{cpp,moc}) from the given interface XML file <interface-file> and adds it to the variable which contains a list of sources (specified as variable name <variable>).

Additional parameters can be passed to the qdbusxml2cpp call by setting the following source file properties on the input file <interface-file>:

INCLUDE

The given file will be included in the generate interface header.

CLASSNAME

The name of the generated class.

NO_NAMESPACE

The generated class will not be wrapped in a namespace.

qt4_add_dbus_interfaces

Creates the interface header and implementation files from multiple interface XML files:

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

This macro creates the interface header and implementation files for all listed interface XML files <interface-files>. The basename will be automatically determined from the name of the XML file. The resulting output files list is stored in a variable <variable>.

The source file properties described for qt4_add_dbus_interface() also apply here.

qt4_add_dbus_adaptor

Generates an adaptor class for a D-Bus interface:

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

Creates a D-Bus adaptor (header and implementation file) from the XML file describing the interface, and adds it to the list of sources. The adaptor forwards the calls to a parent class, defined in <parent-header> and named <parent-classname>. The generated filenames will be <basename>adaptor.{cpp,h} where <basename> defaults to the basename of the XML file if not given. If <classname> is provided, then it will be used as the classname of the adaptor itself. Generated filenames are stored in a variable <variable>.

qt4_generate_dbus_interface

Generates a D-Bus XML interface file from a given header file:

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

This macro creates a build rule to extract declaration from the given <header> file to generate a corresponding XML interface file.

<header>

Path to header file from which XML interface file is generated.

<interface>

Path to the generated XML interface file. If this optional argument is omitted, the name of the interface file is constructed from the basename of the header with the suffix .xml appended. A relative path is interpreted as relative to CMAKE_CURRENT_BINARY_DIR.

OPTIONS

A list of options that may be given to qdbuscpp2xml, such as those found when executing qdbuscpp2xml --help.

qt4_create_translation

Creates build rules for generating TS and QM files:

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

This macro creates build rules to generate TS (Translation Source files .ts) files via lupdate and QM (Qt Message files .qm) files via lrelease from the given <directories> and/or <sources>. The TS files are created and/or updated in the source tree (unless given with full paths). The QM files are generated in the build tree.

<qm-files-var>

A list of generated QM files is stored in this variable. Updating the translations can be done by adding the <qm-files-var> to the source list of the project library/executable, so they are always updated, or by adding a custom target to control when they get updated/generated.

<directories>

A list of directories containing source files.

<sources>

A list of source files.

<ts-files>

A list of TS (Translation Source) files.

OPTIONS

Optional list of flags passed to lupdate, such as -extensions, to specify file extensions for directory scanning.

qt4_add_translation

Creates build rules for generating QM files from the given TS files:

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

This macro creates build rules for generating QM files from the given TS files and stores a list of generated filenames of QM files in the <qm-files-var> variable. The <ts-files> must exist and are not updated in any way.

qt4_automoc

Deprecated since version 2.8.11: Use feature provided by the CMAKE_AUTOMOC variable instead.

Runs moc on input files:

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

This macro can be used to have moc automatically handled. For example, if there are foo.h and foo.cpp files, and in foo.h a class uses the Q_OBJECT preprocessor macro, moc has to run on it. If using qt4_wrap_cpp() isn't wanted (however, it is reliable and mature), the #include "foo.moc" can be inserted in foo.cpp and then foo.cpp given as argument to qt4_automoc(). This will scan all listed files <source-files> at configuration phase for such included moc files and if it finds them, a rule is generated to run moc at build time on the accompanying header file foo.h. If a source file has the SKIP_AUTOMOC property set, file will be ignored by this macro.

TARGET

If specified, the INTERFACE_INCLUDE_DIRECTORIES and INTERFACE_COMPILE_DEFINITIONS target properties from the <target> are passed to moc.

qt4_use_modules

Deprecated since version 2.8.11: Use target_link_libraries() with Imported Targets instead.

Provides Qt modules to a project for linking them to a target:

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

This function makes <target> use the <modules> from Qt. Using a Qt module means to link to the library, add the relevant include directories for the module, and add the relevant compiler defines for using the module. Modules are roughly equivalent to Qt4 components.

LINK_PUBLIC or LINK_PRIVATE

Optional linking mode, used as the corresponding argument in the target_link_libraries() call.

For example, calling qt4_use_modules(myexe Core Gui Declarative) will use the QtCore, QtGui and QtDeclarative components on the project target myexe.

Examples

Typical usage to find Qt4, could be something like:

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)