Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qt_set_finalizer_mode.qdoc
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
3
4/*!
5\page qt-set-finalizer-mode.html
6\ingroup cmake-commands-qtcore
7
8\title qt_set_finalizer_mode
9\keyword qt6_set_finalizer_mode
10
11\summary {Customizes aspects of a target's finalization.}
12
13\cmakecommandsince 6.2
14\preliminarycmakecommand
15
16\section1 Synopsis
17
18\badcode
19qt_set_finalizer_mode(target
20 ENABLE | DISABLE
21 MODES modes...
22)
23\endcode
24
25\versionlessCMakeCommandsNote qt6_set_finalizer_mode()
26
27\section1 Description
28
29This command is used to customize some aspects of the finalization of a
30specific \c target. It only has an effect if called before \c target is
31finalized, which occurs in one of the following scenarios:
32
33\list
34\li The project explicitly calls \l{qt6_finalize_target}{qt_finalize_target()}
35 for the \c target. This usually means the \c MANUAL_FINALIZATION keyword was
36 passed to \l{qt6_add_executable}{qt_add_executable()} when the \c target
37 was defined.
38\li CMake 3.17 or earlier is being used, in which case finalization always
39 occurs immediately as part of the call to
40 \l{qt6_add_executable}{qt_add_executable()}.
41\li CMake 3.18 or later is being used, the \c MANUAL_FINALIZATION keyword was
42 not passed to \l{qt6_add_executable}{qt_add_executable()} when the \c target
43 was defined, and deferred finalization has been completed at the end of the
44 \c target's directory scope.
45\endlist
46
47\c{qt_set_finalizer_mode()} is used to enable or disable a list of \e modes,
48where a mode corresponds to a specific aspect of finalization. The currently
49supported finalization modes are:
50
51\table
52\header
53 \li Mode
54 \li Default
55 \li Finalization behavior
56\row
57 \li \c static_plugins
58 \li Enabled
59 \li When Qt is built statically, it creates initializer object libraries
60 for its static plugins. If \c target is an executable and this
61 finalization mode is enabled, any plugin initializer object libraries
62 needed by the \c target will be directly linked to it. This
63 prevents cycles between Qt-provided static libraries and may reduce
64 link time. When this finalizer mode is disabled, each plugin
65 initializer is instead propagated via usage requirements of its
66 associated Qt library, which may cause cycles. If Qt is not built
67 statically, this finalizer mode is not relevant and isn't used.
68\endtable
69
70\sa {qt6_finalize_target}{qt_finalize_target()}
71
72\section1 Example
73
74The following example assumes you are using CMake 3.19 or later (required for
75deferred finalization):
76
77\badcode
78qt_add_executable(my_app main.cpp)
79qt_set_finalizer_mode(my_app ENABLE MODES static_plugins)
80\endcode
81
82The same example using manual finalization might look like this:
83
84\badcode
85qt_add_executable(my_app MANUAL_FINALIZATION main.cpp)
86qt_set_finalizer_mode(my_app ENABLE MODES static_plugins)
87qt_finalize_target(my_app)
88\endcode
89
90*/