1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
5\page qt-add-library.html
6\ingroup cmake-commands-qtcore
9\keyword qt6_add_library
11\summary {Creates and finalizes a library.}
13\include cmake-find-package-core.qdocinc
21 [STATIC | SHARED | MODULE | INTERFACE | OBJECT]
27\versionlessCMakeCommandsNote qt6_add_library()
31\c{qt_add_library()} is a wrapper around CMake's built-in
32\c{add_library()} command. It performs the following tasks:
35\li Create a CMake target of an appropriate library type.
36\li Handle finalization of the CMake target.
39\section2 Target Creation
41The type of library created can be specified explicitly with one of the
42\c STATIC, \c SHARED, \c MODULE, \c INTERFACE or \c OBJECT keywords, just as
43one might for \c{add_library()}. If none of these keywords are given, the
44library type created depends on how Qt was built. If Qt was built statically,
45a static library will be created. Otherwise, a shared library will
46be created. Note that this is different to how CMake's \c{add_library()}
47command works, where the \c BUILD_SHARED_LIBS variable controls the type of
49Since 6.7, the \c{qt_add_library()} command considers \c BUILD_SHARED_LIBS
50when deciding the library type only if the variable is set explicitly and
51\l {QTP0003} is set to \c NEW.
53Any \c{sources} provided will be passed through to the internal call to
56\target qt_add_library finalization
59After a target is created, further processing or \e{finalization} steps may be
60needed. The finalization processing is implemented by the
61\l{qt6_finalize_target}{qt_finalize_target()} command.
63Finalization can occur either as part of this call or be deferred to sometime
64after this command returns (but it should still be in the same directory scope).
65When using CMake 3.19 or later, finalization is automatically deferred to the
66end of the current directory scope. This gives the caller an opportunity to
67modify properties of the created target before it is finalized. When using
68CMake versions earlier than 3.19, automatic deferral isn't supported. In that
69case, finalization is performed immediately before this command returns.
71Regardless of the CMake version, the \c{MANUAL_FINALIZATION} keyword can be
72given to indicate that you will explicitly call
73\l{qt6_finalize_target}{qt_finalize_target()} yourself instead at some later
74time. In general, \c MANUAL_FINALIZATION should not be needed unless the
75project has to support CMake 3.18 or earlier.
77\sa {qt6_finalize_target}{qt_finalize_target()},
78 {qt6_add_executable}{qt_add_executable()}, QTP0003