qt_wrap_cpp
Erzeugt .moc-Dateien aus den Quellen.
Der Befehl ist in der Core
Komponente des Qt6
Pakets definiert, die so geladen werden kann:
find_package(Qt6 REQUIRED COMPONENTS Core)
Dieses Kommando wurde in Qt 5.0 eingeführt.
Zusammenfassung
qt_wrap_cpp
unterstützt zwei Signaturen. Die erste Signatur wurde in Qt 6.8 hinzugefügt und hat die folgende Form:
qt_wrap_cpp(<TARGET> src_file1 [src_file2 ...] [OPTIONS ...] [DEPENDS ...])
Hinweis: Die obige Signatur wird gegenüber der älteren Signatur empfohlen.
qt_wrap_cpp(<VAR> src_file1 [src_file2 ...] [TARGET target] [OPTIONS ...] [DEPENDS ...])
Wenn versionslose Befehle deaktiviert sind, verwenden Sie stattdessen qt6_wrap_cpp()
. Er unterstützt die gleichen Argumente wie dieser Befehl.
Beschreibung
Erzeugt Regeln für den Aufruf von Meta-Object Compiler (moc) für die angegebenen Quelldateien. Für jede Eingabedatei wird eine Ausgabedatei im Build-Verzeichnis erzeugt. Die Pfade der erzeugten Dateien werden zu <VAR>
hinzugefügt.
Hinweis: Dies ist ein Low-Level-Makro. Siehe die CMake AUTOMOC Dokumentation für einen bequemeren Weg, um Quelldateien mit moc
verarbeiten zu lassen.
Argumente
Sie können ein explizites TARGET
setzen. Dadurch wird sichergestellt, dass die Zieleigenschaften INCLUDE_DIRECTORIES
und COMPILE_DEFINITIONS
auch beim Scannen der Quelldateien mit moc
verwendet werden.
Seit Qt 6.8, wenn eine Quelldatei an qt_wrap_cpp
anstelle einer Header-Datei übergeben wird, um eine .moc
Datei für ein Ziel zu generieren, wird der TARGET
Parameter benötigt, um den richtigen Include-Pfad für die generierte .moc
Datei in der Quelldatei zu setzen. Da die generierten .moc
Dateien von qt_wrap_cpp
zu den Quellen des Ziels hinzugefügt werden, werden sie nicht zu <VAR>
hinzugefügt.
Sie können zusätzliche OPTIONS
setzen, die zu den moc
Aufrufen hinzugefügt werden sollen. Mögliche Optionen finden Sie in der moc-Dokumentation.
Die OPTIONS
kann Generatorausdrücke auswerten, wenn TARGET
gesetzt ist.
Hinweis: Wenn die OPTIONS
sowohl Generatorausdrücke als auch Sonderzeichen enthalten, verwenden Sie Variablen, um sie zu implementieren. Verwenden Sie zum Beispiel $<ANGLE-R>
, $<COMMA>
und $<SEMICOLON>
anstelle von >
, ,
und :
. Andernfalls wird der Generatorausdruck nicht korrekt ausgewertet. OPTIONS
sind in Generatorausdrücke eingeschlossen, daher müssen Sie Sonderzeichen in ihnen entschlüsseln.
DEPENDS
ermöglicht es Ihnen, zusätzliche Abhängigkeiten für die Wiederherstellung der generierten Dateien hinzuzufügen. Dies ist nützlich, wenn die Quellen implizite Abhängigkeiten haben, wie z.B. Code für ein Qt-Plugin, das eine .json
Datei mit dem Q_PLUGIN_METADATA() Makro enthält.
Beispiele
Seit Qt 6.8:
qt_add_executable(myapp myapp.cpp main.cpp) qt_wrap_cpp(myapp myapp.cpp)
// myapp.cpp #include "myapp.h" #include <QObject> class MyApp : public QObject { Q_OBJECT public: MyApp() = default; }; #include "myapp.moc"
In der obigen Datei ist myapp.moc
in myapp.cpp
enthalten. Um die Datei myapp.moc
zu erzeugen, wird das Makro qt_wrap_cpp
mit dem Parameter TARGET
verwendet. Die Datei .moc
und ihr Pfad werden durch das Makro qt_wrap_cpp
zu den Quell- und Include-Verzeichnissen des Ziels hinzugefügt.
Die alte Version:
set(SOURCES myapp.cpp main.cpp) qt_wrap_cpp(SOURCES myapp.h) qt_add_executable(myapp ${SOURCES})
Im folgenden Beispiel werden die Generatorausdrücke, die an OPTIONS
übergeben werden, ausgewertet, da TARGET
gesetzt ist. Das Argument wird auf diese Weise angegeben, um Syntaxfehler in den Generatorausdrücken zu vermeiden.
set(SOURCES myapp.cpp main.cpp) qt_wrap_cpp(SOURCES myapp.h TARGET myapp OPTIONS "$<$<CONFIG:Debug>:-DMY_OPTION_FOR_DEBUG>" "-DDEFINE_CMDLINE_SIGNAL=void cmdlineSignal(const QMap<int, int> &i)" "$<$<CONFIG:Debug>:-DDEFINE_CMDLINE_SIGNAL_IN_GENEX=void cmdlineSignal(const QMap<int$<COMMA> int$<ANGLE-R> &i)>") qt_add_executable(myapp ${SOURCES})
Das folgende Beispiel verwendet target_compile_definitions, um COMPILE_DEFINITIONS zu setzen, die zu OPTIONS
hinzugefügt werden.
set(SOURCES myapp.cpp main.cpp) qt_wrap_cpp(SOURCES myapp.h TARGET myapp) qt_add_executable(myapp ${SOURCES}) target_compile_definitions(myapp PRIVATE "$<$<CONFIG:Debug>:MY_OPTION_FOR_DEBUG>" "DEFINE_CMDLINE_SIGNAL=void cmdlineSignal(const QMap<int, int> &i)" "$<$<BOOL:TRUE>:DEFINE_CMDLINE_SIGNAL_IN_GENEX=void cmdlineSignal(const QMap<int$<COMMA> int$<ANGLE-R> &i)>")
© 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.