CMAKE-QT(7) CMake CMAKE-QT(7)
NAME
cmake-qt - CMake Qt Features Reference
INTRODUCTION
CMake can find and use Qt 4 and Qt 5 libraries. The Qt 4 libraries are
found by the FindQt4 find-module shipped with CMake, whereas the Qt 5
libraries are found using "Config-file Packages" shipped with Qt 5. See
cmake-packages(7) for more information about CMake packages, and see
the Qt cmake manual for your Qt version.
Qt 4 and Qt 5 may be used together in the same CMake buildsystem:
cmake_minimum_required(VERSION 3.8.0 FATAL_ERROR)
project(Qt4And5)
set(CMAKE_AUTOMOC ON)
find_package(Qt5 COMPONENTS Widgets DBus REQUIRED)
add_executable(publisher publisher.cpp)
target_link_libraries(publisher Qt5::Widgets Qt5::DBus)
find_package(Qt4 REQUIRED)
add_executable(subscriber subscriber.cpp)
target_link_libraries(subscriber Qt4::QtGui Qt4::QtDBus)
A CMake target may not link to both Qt 4 and Qt 5. A diagnostic is is-
sued if this is attempted or results from transitive target dependency
evaluation.
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 file system content generation. These tools may be au-
tomatically invoked by cmake(1) if the appropriate conditions are met.
The automatic tool invocation may be used with both Qt 4 and Qt 5.
AUTOMOC
The AUTOMOC target property controls whether cmake(1) inspects the C++
files in the target to determine if they require moc to be run, and to
create rules to execute moc at the appropriate time.
If a macro from AUTOMOC_MACRO_NAMES is found in a header file, moc will
be run on the file. The result will be put into a file named according
to moc_<basename>.cpp. If the macro is found in a C++ implementation
file, the moc output will be put into a file named according to <base-
name>.moc, following the Qt conventions. The <basename>.moc must be
included by the user in the C++ implementation file with a preprocessor
#include.
Included moc_*.cpp and *.moc files will be generated in the <AUTO-
GEN_BUILD_DIR>/include directory which is automatically added to the
target's INCLUDE_DIRECTORIES.
• This differs from CMake 3.7 and below; see their documentation for
details.
• For multi configuration generators, the include directory is <AUTO-
GEN_BUILD_DIR>/include_<CONFIG>.
• See AUTOGEN_BUILD_DIR.
Not included moc_<basename>.cpp files will be generated in custom fold-
ers to avoid name collisions and included in a separate file which is
compiled into the target, named either <AUTOGEN_BUILD_DIR>/mocs_compi-
lation.cpp or <AUTOGEN_BUILD_DIR>/mocs_compilation_$<CONFIG>.cpp.
• See AUTOGEN_BUILD_DIR.
The moc command line will consume the COMPILE_DEFINITIONS and IN-
CLUDE_DIRECTORIES target properties from the target it is being invoked
for, and for the appropriate build configuration.
The AUTOMOC target property may be pre-set for all following targets by
setting the CMAKE_AUTOMOC variable. The AUTOMOC_MOC_OPTIONS target
property may be populated to set options to pass to moc. The CMAKE_AU-
TOMOC_MOC_OPTIONS variable may be populated to pre-set the options for
all following targets.
Additional macro names to search for can be added to AUTO-
MOC_MACRO_NAMES.
Additional moc dependency file names can be extracted from source code
by using AUTOMOC_DEPEND_FILTERS.
Source C++ files can be excluded from AUTOMOC processing by enabling
SKIP_AUTOMOC or the broader SKIP_AUTOGEN.
AUTOUIC
The AUTOUIC target property controls whether cmake(1) inspects the C++
files in the target to determine if they require uic to be run, and to
create rules to execute uic at the appropriate time.
If a preprocessor #include directive is found which matches
<path>ui_<basename>.h, and a <basename>.ui file exists, then uic will
be executed to generate the appropriate file. The <basename>.ui file
is searched for in the following places
1. <source_dir>/<basename>.ui
2. <source_dir>/<path><basename>.ui
3. <AUTOUIC_SEARCH_PATHS>/<basename>.ui
4. <AUTOUIC_SEARCH_PATHS>/<path><basename>.ui
where <source_dir> is the directory of the C++ file and
AUTOUIC_SEARCH_PATHS is a list of additional search paths.
The generated generated ui_*.h files are placed in the <AUTO-
GEN_BUILD_DIR>/include directory which is automatically added to the
target's INCLUDE_DIRECTORIES.
• This differs from CMake 3.7 and below; see their documentation for
details.
• For multi configuration generators, the include directory is <AUTO-
GEN_BUILD_DIR>/include_<CONFIG>.
• See AUTOGEN_BUILD_DIR.
The AUTOUIC target property may be pre-set for all following targets by
setting the CMAKE_AUTOUIC variable. The AUTOUIC_OPTIONS target prop-
erty may be populated to set options to pass to uic. The
CMAKE_AUTOUIC_OPTIONS variable may be populated to pre-set the options
for all following targets. The AUTOUIC_OPTIONS source file property
may be set on the <basename>.ui file to set particular options for the
file. This overrides options from the AUTOUIC_OPTIONS target property.
A target may populate the INTERFACE_AUTOUIC_OPTIONS target property
with options that should be used when invoking uic. This must be con-
sistent with the AUTOUIC_OPTIONS target property content of the depen-
der target. The CMAKE_DEBUG_TARGET_PROPERTIES variable may be used to
track the origin target of such INTERFACE_AUTOUIC_OPTIONS. This means
that a library which provides an alternative translation system for Qt
may specify options which should be used when running uic:
add_library(KI18n klocalizedstring.cpp)
target_link_libraries(KI18n Qt5::Core)
# KI18n uses the tr2i18n() function instead of tr(). That function is
# declared in the klocalizedstring.h header.
set(autouic_options
-tr tr2i18n
-include klocalizedstring.h
)
set_property(TARGET KI18n APPEND PROPERTY
INTERFACE_AUTOUIC_OPTIONS ${autouic_options}
)
A consuming project linking to the target exported from upstream auto-
matically uses appropriate options when uic is run by AUTOUIC, as a re-
sult of linking with the IMPORTED target:
set(CMAKE_AUTOUIC ON)
# Uses a libwidget.ui file:
add_library(LibWidget libwidget.cpp)
target_link_libraries(LibWidget
KF5::KI18n
Qt5::Widgets
)
Source files can be excluded from AUTOUIC processing by enabling
SKIP_AUTOUIC or the broader SKIP_AUTOGEN.
AUTORCC
The AUTORCC target property controls whether cmake(1) creates rules to
execute rcc at the appropriate time on source files which have the suf-
fix .qrc.
add_executable(myexe main.cpp resource_file.qrc)
The AUTORCC target property may be pre-set for all following targets by
setting the CMAKE_AUTORCC variable. The AUTORCC_OPTIONS target prop-
erty may be populated to set options to pass to rcc. The CMAKE_AU-
TORCC_OPTIONS variable may be populated to pre-set the options for all
following targets. The AUTORCC_OPTIONS source file property may be set
on the <name>.qrc file to set particular options for the file. This
overrides options from the AUTORCC_OPTIONS target property.
Source files can be excluded from AUTORCC processing by enabling
SKIP_AUTORCC or the broader SKIP_AUTOGEN.
THE <ORIGIN>_AUTOGEN TARGET
The moc and uic tools are executed as part of a synthesized <ORI-
GIN>_autogen custom target generated by CMake. By default that <ORI-
GIN>_autogen target inherits the dependencies of the <ORIGIN> target
(see AUTOGEN_ORIGIN_DEPENDS). Target dependencies may be added to the
<ORIGIN>_autogen target by adding them to the AUTOGEN_TARGET_DEPENDS
target property.
VISUAL STUDIO GENERATORS
When using the Visual Studio generators, CMake generates a PRE_BUILD
custom command instead of the <ORIGIN>_autogen custom target (for AUTO-
MOC and AUTOUIC). This isn't always possible though and an <ORI-
GIN>_autogen custom target is used, when either
• the <ORIGIN> target depends on GENERATED files which aren't excluded
from AUTOMOC and AUTOUIC by SKIP_AUTOMOC, SKIP_AUTOUIC, SKIP_AUTOGEN
or CMP0071
• AUTOGEN_TARGET_DEPENDS lists a source file
• CMAKE_GLOBAL_AUTOGEN_TARGET is enabled
QTMAIN.LIB ON WINDOWS
The Qt 4 and 5 IMPORTED targets for the QtGui libraries specify that
the qtmain.lib static library shipped with Qt will be linked by all de-
pendent executables which have the WIN32_EXECUTABLE enabled.
To disable this behavior, enable the Qt5_NO_LINK_QTMAIN target property
for Qt 5 based targets or QT4_NO_LINK_QTMAIN target property for Qt 4
based targets.
add_executable(myexe WIN32 main.cpp)
target_link_libraries(myexe Qt4::QtGui)
add_executable(myexe_no_qtmain WIN32 main_no_qtmain.cpp)
set_property(TARGET main_no_qtmain PROPERTY QT4_NO_LINK_QTMAIN ON)
target_link_libraries(main_no_qtmain Qt4::QtGui)
COPYRIGHT
2000-2024 Kitware, Inc. and Contributors
3.22.1 February 03, 2024 CMAKE-QT(7)
Generated by dwww version 1.14 on Fri Dec 5 05:48:29 CET 2025.