qt_add_executable
Erzeugt und finalisiert ein Anwendungsziel eines plattformspezifischen Typs.
Der Befehl ist in der Core
Komponente des Qt6
Pakets definiert, das so geladen werden kann:
find_package(Qt6 REQUIRED COMPONENTS Core)
Dieses Kommando wurde in Qt 6.0 eingeführt.
Synopse
qt_add_executable(target [WIN32] [MACOSX_BUNDLE] [MANUAL_FINALIZATION] sources...)
Wenn versionslose Befehle deaktiviert sind, verwenden Sie stattdessen qt6_add_executable()
. Es unterstützt den gleichen Satz von Argumenten wie dieser Befehl.
Beschreibung
Dieser Befehl führt die folgenden Aufgaben aus:
- Er erstellt ein CMake-Target des entsprechenden Typs für die Zielplattform.
- Verknüpfen des Ziels mit der Bibliothek
Qt::Core
. - Finalisierung des CMake-Ziels.
Erstellung des Ziels
Auf allen Plattformen außer Android wird ein ausführbares Ziel erstellt. Alle Argumente werden an den CMake-Standardbefehl add_executable()
weitergegeben, mit Ausnahme von MANUAL_FINALIZATION
(falls vorhanden). Unter Android wird eine MODULE
Bibliothek erstellt und alle WIN32
oder MACOSX_BUNDLE
Optionen werden ignoriert. Einige Zieleigenschaften werden auch für Android gesetzt:
- Die Zieleigenschaft
SUFFIX
wird gesetzt, um dem Dateinamen der Bibliothek ein architekturspezifisches Suffix zu geben. - Verschiedene
<lang>_VISIBILITY_PRESET
Zieleigenschaften werden aufdefault
gesetzt, um sicherzustellen, dass die Funktionmain()
in der resultierenden Binärdatei sichtbar ist.
Linken von Qt::Core
Da alle Qt-Applikationen mit der Qt::Core
Bibliothek verknüpft werden müssen, wird dies für Sie aus Bequemlichkeit getan.
Fertigstellung
Nachdem ein Target erstellt wurde, sind in der Regel weitere Verarbeitungs- oder Finalisierungsschritte erforderlich. Die durchzuführenden Schritte hängen von der Plattform und von verschiedenen Eigenschaften des Targets ab.
Die Finalisierung wird durch zwei Befehle realisiert: qt_finalize_target() und qt_finalize_project().
Die Finalisierung des Targets kann entweder als Teil des Aufrufs von qt_add_executable
erfolgen oder auf einen Zeitpunkt nach der Rückkehr dieses Befehls verschoben werden (sie sollte aber immer noch im selben Verzeichnisbereich stattfinden).
Bei der Verwendung von CMake 3.19 oder höher wird die Finalisierung des Ziels automatisch auf das Ende des aktuellen Verzeichnisbereichs verschoben. Dies gibt dem Aufrufer die Möglichkeit, Eigenschaften des erstellten Ziels zu ändern, bevor es fertiggestellt wird. Bei der Verwendung von CMake-Versionen vor 3.19 wird die automatische Verschiebung nicht unterstützt. In diesem Fall wird die Finalisierung des Targets unmittelbar vor der Rückkehr dieses Befehls durchgeführt.
Unabhängig von der CMake-Version kann das Schlüsselwort MANUAL_FINALIZATION
angegeben werden, um anzuzeigen, dass Sie qt_finalize_target() zu einem späteren Zeitpunkt explizit selbst aufrufen werden. Im Allgemeinen sollte MANUAL_FINALIZATION
nicht benötigt werden, es sei denn, das Projekt muss CMake 3.18 oder früher unterstützen.
Die Projektfinalisierung erfolgt automatisch, wenn CMake 3.19 oder höher verwendet wird. Wenn Sie eine ältere CMake-Version verwenden, sollten Sie qt_finalize_project() manuell aufrufen, und zwar am Ende der Root-Datei CMakeLists.txt
. Dies ist besonders wichtig, wenn Sie auf Android abzielen, um Abhängigkeiten zwischen Projektzielen für die Bereitstellung zu sammeln.
Beispiele
Im folgenden einfachen Fall wird die Finalisierung automatisch durchgeführt. Wenn Sie eine CMake-Version vor 3.19 verwenden, wird die Finalisierung sofort als Teil des Aufrufs durchgeführt. Wenn Sie CMake 3.19 oder höher verwenden, erfolgt die Finalisierung am Ende des aktuellen Verzeichnisbereichs.
qt_add_executable(simpleapp main.cpp)
Das folgende Beispiel zeigt ein Szenario, in dem die Finalisierung aufgeschoben werden muss. Die Eigenschaft OUTPUT_NAME
target wirkt sich auf die Deployment-Einstellungen unter Android aus, aber diese Einstellungen werden als Teil der Finalisierung des Targets herausgeschrieben. Um die Verwendung von CMake-Versionen vor 3.19 zu unterstützen, übernehmen wir die Verantwortung für die Finalisierung des Targets, indem wir das Schlüsselwort MANUAL_FINALIZATION
hinzufügen.
qt_add_executable(complexapp MANUAL_FINALIZATION complex.cpp) set_target_properties(complexapp PROPERTIES OUTPUT_NAME Complexify) qt_finalize_target(complexapp)
Warnung: Wenn Ihr Android-Projekt mit einer CMake-Version kleiner als 3.19 erstellt wurde, stellen Sie sicher, dass Sie qt6_finalize_project() am Ende einer CMakeLists.txt auf oberster Ebene aufrufen.
Siehe auch qt_finalize_target(), qt_set_finalizer_mode(), qt_add_library(), und qt_finalize_project().
© 2025 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.