Add docs for qt_set_finalizer_mode()
Task-number: QTBUG-95712 Pick-to: 6.2 6.2.0 Change-Id: Ie7b9282cfc6a27415db5e623a66317c9681c3991 Reviewed-by: Luca Di Sera <luca.disera@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
This commit is contained in:
parent
d3a622f817
commit
3ce0672143
@ -954,26 +954,6 @@ if(NOT QT_NO_CREATE_VERSIONLESS_FUNCTIONS)
|
||||
endif()
|
||||
|
||||
# This function is currently in Technical Preview. It's signature may change or be removed entirely.
|
||||
|
||||
# This function allows enabling or disabling finalizer modes for a specific target.
|
||||
# Currently, the only supported finalizer mode is for plugin importing in static Qt builds which
|
||||
# is called 'static_plugins'. You can enable / disable it by calling
|
||||
#
|
||||
# qt6_set_finalizer_mode(${target} ENABLE MODES "static_plugins")
|
||||
# qt6_set_finalizer_mode(${target} DISABLE MODES "static_plugins")
|
||||
#
|
||||
# When the "static_plugins" finalizer mode is enabled, all plugins initializer object libraries are
|
||||
# directly linked to the given ${target} (executable or shared library).
|
||||
# This prevents cycles between Qt provided static libraries and reduces link time, thanks to the
|
||||
# libraries not being repeated on the link line because they are not part of a cycle anymore.
|
||||
#
|
||||
# When the finalizer mode is disabled, each plugin initializer is propagated via usage requirements
|
||||
# of its associated module, which may cause cycles in the current build system implementation.
|
||||
#
|
||||
# The "static_plugins" finalizer mode is enabled by default if:
|
||||
# - the project calls qt_finalize_target explicitly at the end of the project file or
|
||||
# - the project uses qt_add_executable and a CMake version greater than or equal to 3.19
|
||||
# (which will DEFER CALL qt_finalize_target)
|
||||
function(qt6_set_finalizer_mode target)
|
||||
cmake_parse_arguments(arg "ENABLE;DISABLE" "" "MODES" ${ARGN})
|
||||
if(NOT arg_ENABLE AND NOT arg_DISABLE)
|
||||
|
@ -97,6 +97,7 @@ yourself instead at some later time. In general, \c MANUAL_FINALIZATION should
|
||||
not be needed unless the project has to support CMake 3.18 or earlier.
|
||||
|
||||
\sa {qt6_finalize_target}{qt_finalize_target()},
|
||||
{qt6_set_finalizer_mode}{qt_set_finalizer_mode()},
|
||||
{qt6_add_library}{qt_add_library()}
|
||||
|
||||
\section1 Examples
|
||||
|
@ -57,6 +57,8 @@ This command is ordinarily invoked as part of a call to
|
||||
place and when it might need to be called explicitly by a project is discussed
|
||||
in the documentation of those commands.
|
||||
|
||||
\sa {qt6_set_finalizer_mode}{qt_set_finalizer_mode()}
|
||||
|
||||
\section1 Executable Targets
|
||||
|
||||
For executable targets, \c{qt_finalize_target()} implements the logic described
|
||||
|
113
src/corelib/doc/src/cmake/qt_set_finalizer_mode.qdoc
Normal file
113
src/corelib/doc/src/cmake/qt_set_finalizer_mode.qdoc
Normal file
@ -0,0 +1,113 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2021 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the documentation of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:FDL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Free Documentation License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Free
|
||||
** Documentation License version 1.3 as published by the Free Software
|
||||
** Foundation and appearing in the file included in the packaging of
|
||||
** this file. Please review the following information to ensure
|
||||
** the GNU Free Documentation License version 1.3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
/*!
|
||||
\page qt_set_finalizer_mode.html
|
||||
\ingroup cmake-macros-qtcore
|
||||
|
||||
\title qt_set_finalizer_mode
|
||||
\target qt6_set_finalizer_mode
|
||||
|
||||
\brief Customizes aspects of a target's finalization.
|
||||
|
||||
\preliminarycmakecommand
|
||||
|
||||
\section1 Synopsis
|
||||
|
||||
\badcode
|
||||
qt_set_finalizer_mode(target
|
||||
ENABLE | DISABLE
|
||||
MODES modes...
|
||||
)
|
||||
\endcode
|
||||
|
||||
\versionlessCMakeCommandsNote qt6_set_finalizer_mode()
|
||||
|
||||
\section1 Description
|
||||
|
||||
This command is used to customize some aspects of the finalization of a
|
||||
specific \c target. It only has an effect if called before \c target is
|
||||
finalized, which occurs in one of the following scenarios:
|
||||
|
||||
\list
|
||||
\li The project explicitly calls \l{qt6_finalize_target}{qt_finalize_target()}
|
||||
for the \c target. This usually means the \c MANUAL_FINALIZATION keyword was
|
||||
passed to \l{qt6_add_executable}{qt_add_executable()} when the \c target
|
||||
was defined.
|
||||
\li CMake 3.17 or earlier is being used, in which case finalization always
|
||||
occurs immediately as part of the call to
|
||||
\l{qt6_add_executable}{qt_add_executable()}.
|
||||
\li CMake 3.18 or later is being used, the \c MANUAL_FINALIZATION keyword was
|
||||
not passed to \l{qt6_add_executable}{qt_add_executable()} when the \c target
|
||||
was defined, and deferred finalization has been completed at the end of the
|
||||
\c target's directory scope.
|
||||
\endlist
|
||||
|
||||
\c{qt_set_finalizer_mode()} is used to enable or disable a list of \e modes,
|
||||
where a mode corresponds to a specific aspect of finalization. The currently
|
||||
supported finalization modes are:
|
||||
|
||||
\table
|
||||
\header
|
||||
\li Mode
|
||||
\li Default
|
||||
\li Finalization behavior
|
||||
\row
|
||||
\li \c static_plugins
|
||||
\li Enabled
|
||||
\li When Qt is built statically, it creates initializer object libraries
|
||||
for its static plugins. If \c target is an executable and this
|
||||
finalization mode is enabled, any plugin initializer object libraries
|
||||
needed by the \c target will be directly linked to it. This
|
||||
prevents cycles between Qt-provided static libraries and may reduce
|
||||
link time. When this finalizer mode is disabled, each plugin
|
||||
initializer is instead propagated via usage requirements of its
|
||||
associated Qt library, which may cause cycles. If Qt is not built
|
||||
statically, this finalizer mode is not relevant and isn't used.
|
||||
\endtable
|
||||
|
||||
\sa {qt6_finalize_target}{qt_finalize_target()}
|
||||
|
||||
\section1 Example
|
||||
|
||||
The following example assumes you are using CMake 3.19 or later (required for
|
||||
deferred finalization):
|
||||
|
||||
\badcode
|
||||
qt_add_executable(my_app main.cpp)
|
||||
qt_set_finalizer_mode(my_app ENABLE MODES static_plugins)
|
||||
\endcode
|
||||
|
||||
The same example using manual finalization might look like this:
|
||||
|
||||
\badcode
|
||||
qt_add_executable(my_app MANUAL_FINALIZATION main.cpp)
|
||||
qt_set_finalizer_mode(my_app ENABLE MODES static_plugins)
|
||||
qt_finalize_target(my_app)
|
||||
\endcode
|
||||
|
||||
*/
|
Loading…
Reference in New Issue
Block a user