summaryrefslogtreecommitdiffstats
path: root/src/corelib/doc/src/cmake/qt_wrap_cpp.qdoc
blob: 3b298a9d7e13ccbaa0c78150ef2eec2b58d14859 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only

/*!
\page qt-wrap-cpp.html
\ingroup cmake-commands-qtcore

\title qt_wrap_cpp
\keyword qt6_wrap_cpp

\summary {Creates .moc files from sources.}

\include cmake-find-package-core.qdocinc

\cmakecommandsince 5.0

\section1 Synopsis

\badcode
qt_wrap_cpp(<VAR> src_file1 [src_file2 ...]
            [TARGET target]
            [OPTIONS ...]
            [DEPENDS ...])
\endcode

\versionlessCMakeCommandsNote qt6_wrap_cpp()

\section1 Description

Creates rules for calling the \l{moc}{Meta-Object Compiler (moc)} on the given
source files. For each input file, an output file is generated in the build
directory. The paths of the generated files are added to \c{<VAR>}.

\note This is a low-level macro. See the \l{CMake AUTOMOC Documentation} for a
more convenient way to let source files be processed with \c{moc}.

\section1 Arguments

You can set an explicit \c{TARGET}. This will make sure that the target
properties \c{INCLUDE_DIRECTORIES} and \c{COMPILE_DEFINITIONS} are also used
when scanning the source files with \c{moc}.

Since Qt 6.8, when a source file is passed to \c{qt_wrap_cpp} instead of a
header file to generate a \c{.moc} file for a target, the \c{TARGET} parameter
is needed to set the correct include path for the generated \c{.moc} file in
the source file. As generated \c{.moc} files are added to the target's
sources by \c{qt_wrap_cpp}, they are not added to \c{<VAR>}.

You can set additional \c{OPTIONS} that should be added to the \c{moc} calls.
You can find possible options in the \l{moc}{moc documentation}.

The \c{OPTIONS} can evaluate generator expressions when \c{TARGET} is set.
\note If the \c{OPTIONS} include both generator expressions and special
characters, use variables to implement them. For example, use \c{$<ANGLE-R>},
\c{$<COMMA>} and \c{$<SEMICOLON>} instead of \c{>}, \c{,} and \c{:}. Otherwise,
the generator expression will not be evaluated correctly. \c {OPTIONS} are
wrapped in generator expressions, so you must escape special characters in
them.

\c{DEPENDS} allows you to add additional dependencies for recreation of the
generated files. This is useful when the sources have implicit dependencies,
like code for a Qt plugin that includes a \c{.json} file using the
Q_PLUGIN_METADATA() macro.

\section1 Examples

\snippet cmake-macros/examples.cmake qt_wrap_cpp_1

In the following example, the generator expressions passed to \c{OPTIONS}
will be evaluated since \c{TARGET} is set. The argument is specified this way to
avoid syntax errors in the generator expressions.

\snippet cmake-macros/examples.cmake qt_wrap_cpp_2

The following example uses \l{https://cmake.org/cmake/help/latest/command/target_compile_definitions.html}{target_compile_definitions}
to set \l{https://cmake.org/cmake/help/latest/prop_tgt/COMPILE_DEFINITIONS.html}{COMPILE_DEFINITIONS} which will be added to
\c{OPTIONS}.

\snippet cmake-macros/examples.cmake qt_wrap_cpp_4

\snippet cmake-macros/examples.cpp qt_wrap_cpp_4

In the above file, \c{myapp.moc} is included in \c{myapp.cpp}.
To generate the \c{myapp.moc} file, the \c{qt_wrap_cpp} macro is used with the
\c{TARGET} parameter. The first parameter is empty because the \c{.moc} file
and its path will be added to the target's sources and include directories by
the \c{qt_wrap_cpp} macro.

\snippet cmake-macros/examples.cmake qt_wrap_cpp_4
*/