qt_finalize_target
Erledigt verschiedene gängige plattformspezifische Aufgaben im Zusammenhang mit Qt-Zielen.
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.2 eingeführt.
Übersicht
qt_finalize_target(target)Wenn versionslose Befehle deaktiviert sind, verwenden Sie stattdessen „ qt6_finalize_target() “. Dieser Befehl unterstützt dieselben Argumente wie der vorliegende Befehl.
Beschreibung
Nachdem ein Ziel erstellt wurde, sind manchmal weitere Verarbeitungs- oder Abschlussschritte erforderlich. Welche Schritte durchgeführt werden müssen, hängt von der Plattform, der Art des Ziels und verschiedenen Eigenschaften des Ziels ab. Es wird erwartet, dass diese Schritte innerhalb desselben Verzeichnisbereichs ausgeführt werden, in dem das target erstellt wurde; daher sollte dieser Befehl auch aus diesem Verzeichnisbereich aufgerufen werden.
Dieser Befehl wird üblicherweise als Teil eines Aufrufs von ` qt_add_executable()`, `qt_add_library()` oder `qt_add_plugin()` aufgerufen. Der Zeitpunkt, zu dem dieser Aufruf erfolgt und wann ein Projekt ihn möglicherweise explizit aufrufen muss, wird in der Dokumentation dieser Befehle erläutert.
Ausführbare Ziele
Für ausführbare Ziele implementiert ` qt_finalize_target() ` die in den folgenden Unterabschnitten beschriebene Logik entsprechend der angegebenen Plattform und dem angegebenen Ziel. In späteren Qt-Versionen wird die Finalisierungsverarbeitung möglicherweise weiter ausgebaut.
Alle Plattformen
Es werden einige interne Verarbeitungsschritte durchgeführt, um die automatische Verknüpfung von Qt-Plugins zu erleichtern. Dies ist besonders wichtig, wenn ein statisch kompiliertes Qt oder eine CMake-Version vor 3.21 verwendet wird.
Android
- Generieren Sie eine Datei mit den Bereitstellungseinstellungen für die „
target“. - Erstellen Sie ein Build-Ziel zur Generierung einer APK-Datei.
WASM
Erstellen Sie die Dateien „ ${target}.html “ (eine zielspezifische „ wasm_shell.html “-Datei), „ qtloader.js “ und „ qtlogo.svg “ im Verzeichnis „ CMAKE_CURRENT_BINARY_DIR “.
iOS
Bei der Finalisierung wird versucht, sinnvolle Werte für die folgenden Ziel-Eigenschaften bereitzustellen, sofern diese noch nicht festgelegt sind und die entsprechende Variable „ CMAKE_... “ ebenfalls nicht gesetzt ist:
XCODE_ATTRIBUTE_DEVELOPMENT_TEAMXCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIERMACOSX_BUNDLE_GUI_IDENTIFIER
Bei Bedarf kann die Variable `QT_NO_SET_XCODE_DEVELOPMENT_TEAM_ID` verwendet werden, um die Festlegung von ` XCODE_ATTRIBUTE_DEVELOPMENT_TEAM` zu deaktivieren, und die Variable ` QT_NO_SET_XCODE_BUNDLE_IDENTIFIER` kann verwendet werden, um die Festlegung von ` XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER ` und ` MACOSX_BUNDLE_GUI_IDENTIFIER` zu deaktivieren.
Einbettung von Abhängigkeiten von gemeinsam genutzten Bibliotheken
Eine Anwendung, die von gemeinsam genutzten Bibliotheken abhängt, kann nur gestartet werden, wenn die gemeinsam genutzten Bibliotheken, mit denen sie verknüpft ist, Teil ihres Bundles sind.
Seit Qt 6.12 erfasst das Build-System die gemeinsam genutzten Bibliotheken, mit denen die Anwendung verknüpft ist, und fügt sie der Build-Phase „ XCODE_EMBED_FRAMEWORKS “ der Anwendung hinzu, wobei „ CODE_SIGN_ON_COPY “ aktiviert ist. Dabei werden sowohl Framework-Bundles als auch einfache „ dylib “-Bibliotheken berücksichtigt.
Eine Einbettung erfolgt nur, wenn alle folgenden Bedingungen erfüllt sind:
- Qt wurde in einer Konfiguration mit gemeinsam genutzten Bibliotheken erstellt.
- Der Xcode-Generator wird verwendet.
- Qt wurde nicht sowohl mit einer Debug- als auch mit einer Release-Konfiguration erstellt, da
XCODE_EMBED_FRAMEWORKSpro Bibliothek nur einen einzigen Pfad enthält und daher nicht beide Konfigurationen beschreiben kann. - Das Ziel ist ein Anwendungs-Bundle und kein untergeordnetes Bundle wie beispielsweise eine App-Erweiterung. Von untergeordneten Bundles wird erwartet, dass sie die Frameworks ihrer übergeordneten Anwendung verwenden.
- Die Eigenschaft „
XCODE_EMBED_FRAMEWORKS“ ist für das Ziel noch nicht festgelegt, was als Hinweis darauf gewertet wird, dass das Projekt die Einbettung selbst übernimmt.
Um die gemeinsam genutzten Bibliotheken selbst bereitzustellen, setzen Sie die Eigenschaft „QT_NO_XCODE_EMBED_FRAMEWORKS“ für das Anwendungsziel.
Um einzelne Bibliotheken auszuschließen, setzen Sie die Eigenschaft ` QT_NO_XCODE_EMBED_FRAMEWORK_IN_CONSUMERS ` für diese Bibliotheken.
Bibliotheksziele
Ab dieser Qt-Version führt die Finalisierung für Bibliotheksziele keine Verarbeitung mehr durch. In zukünftigen Qt-Versionen könnte eine Finalisierungsverarbeitung für Bibliotheken hinzugefügt werden; daher sollten Sie sicherstellen, dass die Finalisierung weiterhin wie erwartet aufgerufen wird.
Siehe auch qt_set_finalizer_mode().
© 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.