qt_add_plugin
Erstellt ein Qt-Plugin-Ziel.
Der Befehl ist in der Komponente „ Core “ des Pakets „ Qt6 “ definiert, das wie folgt geladen werden kann:
find_package(Qt6 REQUIRED COMPONENTS Core)Dieser Befehl wurde in Qt 6.0 eingeführt.
Übersicht
qt_add_plugin(target
[SHARED | STATIC]
[CLASS_NAME class_name]
[OUTPUT_TARGETS variable_name]
[MANUAL_FINALIZATION]
sources...
)Die Option „ MANUAL_FINALIZATION “ und die Möglichkeit, Quellen festzulegen, wurden in Qt 6.5 eingeführt.
Wenn versionslose Befehle deaktiviert sind, verwenden Sie stattdessen „ qt6_add_plugin() “. Dieser Befehl unterstützt dieselben Argumente wie der vorgenannte Befehl.
Beschreibung
Qt-Plugin-Ziele stellen zusätzliche Anforderungen, die über die eines gewöhnlichen CMake-Bibliotheksziels hinausgehen. Der Befehl „ qt_add_plugin() “ fügt die erforderlichen Funktionen hinzu, um sicherzustellen, dass diese Anforderungen erfüllt werden. Er sollte anstelle des in CMake integrierten Befehls „ add_library() “ aufgerufen werden, wenn ein Qt-Plugin-Ziel definiert wird.
Standardmäßig wird das Plugin als „ STATIC “-Bibliothek erstellt, wenn Qt statisch kompiliert wurde, andernfalls als „ MODULE “-Bibliothek. Sie können diese Standardeinstellung überschreiben, indem Sie explizit die Option „ STATIC “ oder „ SHARED “ angeben.
Jede angegebene ` sources `-Bibliothek wird an den internen Aufruf von ` add_library()` weitergeleitet.
Hinweis: Nicht-statische Plugins sind dafür vorgesehen, zur Laufzeit dynamisch geladen und nicht bereits beim Kompilieren eingebunden zu werden. CMake unterscheidet zwischen diesen beiden Szenarien, indem es den Bibliothekstyp „ MODULE “ für dynamisch geladene Bibliotheken und den Bibliothekstyp „ SHARED “ für Bibliotheken bereitstellt, die direkt eingebunden werden können. Diese Unterscheidung ist für einige Toolchains (insbesondere Visual Studio) aufgrund der Art und Weise, wie Symbolexporte behandelt werden, wichtig. Es ist unter Umständen nicht möglich, eine Verknüpfung zu „ MODULE “-Bibliotheken herzustellen, und die Erstellung einer „ SHARED “-Bibliothek ohne exportierte Symbole kann zu Fehlern bei der Kompilierung führen. Wenn die Option „ SHARED “ an „ qt_add_plugin() “ übergeben wird, wird daher eine „ MODULE “-Bibliothek anstelle einer „ SHARED “-Bibliothek erstellt.
Jedes Qt-Plugin hat einen Klassennamen. Standardmäßig entspricht dieser dem „ target “, kann jedoch mit der Option „ CLASS_NAME “ überschrieben werden. Der Klassenname entspricht dem Namen der C++-Klasse, die die Metadaten für das Plugin deklariert. Bei statischen Plugins ist dies auch der Name, der an „ Q_IMPORT_PLUGIN “ übergeben wird, wodurch das Plugin in eine Anwendung importiert und sichergestellt wird, dass es zur Laufzeit verfügbar ist.
Wird das Plugin statisch erstellt, können mit „ qt_add_plugin() “ zusätzliche interne Ziele definiert werden. Diese erleichtern den automatischen Import des Plugins für jede ausführbare Datei oder Shared Library, die mit dem Plugin verknüpft ist. Wenn das Projekt das Plugin installiert und beabsichtigt, es für andere Projekte zur Verknüpfung verfügbar zu machen, sollte das Projekt auch diese internen Ziele installieren. Die Namen dieser Ziele lassen sich durch Angabe der Option „ OUTPUT_TARGETS “ abrufen, gefolgt vom Namen einer Variablen, in die die Zielliste zurückgegeben werden soll.
Finalisierung
Nachdem ein Ziel erstellt wurde, sind möglicherweise weitere Verarbeitungs- oder Finalisierungsschritte erforderlich. Die Finalisierungsverarbeitung wird durch den Befehl `qt_finalize_target()` implementiert.
Einzelheiten und die Bedeutung der Option „ MANUAL_FINALIZATION “ finden Sie in der Dokumentation zur Finalisierung unter qt_add_library.
Siehe auch qt_finalize_target() und qt_add_executable().
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.