summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorCraig Scott <craig.scott@qt.io>2021-09-21 17:44:03 +1000
committerCraig Scott <craig.scott@qt.io>2021-09-23 00:49:06 +1000
commit7fd9981f4d805832078fc8fa443a358caa0ff60a (patch)
tree9ba16151dbab893d484bd75303d9a0d82c50f7d2 /src
parentfaa99aac43dc8f92f563537f96688639bdc4304e (diff)
Add docs for qt_add_plugin()
Task-number: QTBUG-95712 Pick-to: 6.2 6.2.0 Change-Id: Ifdc10c7714e91f6211a52bd5c46b3140485bbb43 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/Qt6CoreMacros.cmake6
-rw-r--r--src/corelib/doc/src/cmake/cmake-properties.qdoc5
-rw-r--r--src/corelib/doc/src/cmake/qt_add_plugin.qdoc86
3 files changed, 88 insertions, 9 deletions
diff --git a/src/corelib/Qt6CoreMacros.cmake b/src/corelib/Qt6CoreMacros.cmake
index e719c6010e..8e3564e36e 100644
--- a/src/corelib/Qt6CoreMacros.cmake
+++ b/src/corelib/Qt6CoreMacros.cmake
@@ -1930,16 +1930,14 @@ macro(_qt_internal_get_add_plugin_keywords option_args single_args multi_args)
# use it
TYPE
- PLUGIN_TYPE
+ PLUGIN_TYPE # Internal use only, may be changed or removed
CLASS_NAME
- OUTPUT_NAME
+ OUTPUT_NAME # Internal use only, may be changed or removed
OUTPUT_TARGETS
)
set(${multi_args})
endmacro()
-# This function is currently in Technical Preview.
-# It's signature and behavior might change.
function(qt6_add_plugin target)
_qt_internal_get_add_plugin_keywords(opt_args single_args multi_args)
diff --git a/src/corelib/doc/src/cmake/cmake-properties.qdoc b/src/corelib/doc/src/cmake/cmake-properties.qdoc
index 9627187bec..8134209636 100644
--- a/src/corelib/doc/src/cmake/cmake-properties.qdoc
+++ b/src/corelib/doc/src/cmake/cmake-properties.qdoc
@@ -102,11 +102,6 @@ convention similar to Qt plugins, that is, \e {plugins/<plugin name>}.
The plugins libraries should have the name format
\e {libplugins_<type>_<name>_<abi>.so}. This will ensure that the correct name
mangling is applied to the plugin library.
-\omit
-TODO: Not yet documented, API still under review - see QTBUG-88763
-See the \l{qt6_add_plugin}{qt_add_plugin()} command for the easiest way to achieve
-that.
-\endomit
\sa{qt6_android_generate_deployment_settings}{qt_android_generate_deployment_settings()}
*/
diff --git a/src/corelib/doc/src/cmake/qt_add_plugin.qdoc b/src/corelib/doc/src/cmake/qt_add_plugin.qdoc
new file mode 100644
index 0000000000..59c11ad6c7
--- /dev/null
+++ b/src/corelib/doc/src/cmake/qt_add_plugin.qdoc
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** 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_add_plugin.html
+\ingroup cmake-macros-qtcore
+
+\title qt_add_plugin
+\target qt6_add_plugin
+
+\brief Creates a Qt plugin target.
+
+\section1 Synopsis
+
+\badcode
+qt_add_plugin(target
+ [SHARED | STATIC]
+ [CLASS_NAME class_name]
+ [OUTPUT_TARGETS variable_name]
+)
+\endcode
+
+\versionlessCMakeCommandsNote qt6_add_plugin()
+
+\section1 Description
+
+Qt plugin targets have additional requirements over and above an ordinary CMake
+library target. The \c{qt_add_plugin()} command adds the necessary handling to
+ensure these requirements are met. It should be called rather than the built-in
+CMake \c{add_library()} command when defining a Qt plugin target.
+
+By default, the plugin will be created as a \c STATIC library if Qt was built
+statically, or as a \c MODULE library otherwise. You can override this default
+by explicitly providing the \c STATIC or \c SHARED option.
+
+\note Non-static plugins are meant to be loaded dynamically at runtime, not
+linked to at build time. CMake differentiates between these two scenarios by
+providing the \c MODULE library type for dynamically loaded libraries, and
+the \c SHARED library type for libraries that may be linked to directly. This
+distinction is important for some toolchains (notably Visual Studio), due to
+the way symbol exports are handled. It may not be possible to link to
+\c MODULE libraries, and generating a \c SHARED library with no exported
+symbols can result in build-time errors. If the \c SHARED option is passed to
+\c{qt_add_plugin()}, it will therefore create a \c MODULE library rather than a
+\c SHARED library.
+
+Every Qt plugin has a class name. By default, this will be the same as the
+\c target, but it can be overridden with the \c CLASS_NAME option. The class
+name corresponds to the name of the C++ class that declares the metadata for
+the plugin. For static plugins, it is also the name passed to
+\l Q_IMPORT_PLUGIN, which imports the plugin into an application and ensures it
+is available at run time.
+
+If the plugin is built statically, \c{qt_add_plugin()} may define additional
+internal targets. These facilitate automatic importing of the plugin for any
+executable or shared library that links to the plugin. If the project installs
+the plugin and intends to make it available for other projects to link to, the
+project should also install these internal targets. The names of these targets
+can be obtained by providing the \c OUTPUT_TARGETS option, followed by the name
+of a variable in which to return the target list.
+
+*/