qt_wrap_cpp
Erstellt .moc-Dateien aus Quelldateien.
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 5.0 eingeführt.
Übersicht
qt_wrap_cpp unterstützt zwei Signaturen. Die erste Signatur wurde in Qt 6.8 hinzugefügt und hat folgende Form:
qt_wrap_cpp(<TARGET> src_file1 [src_file2 ...]
[OPTIONS ...]
[DEPENDS ...])Hinweis: Die oben genannte 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() “. Dieser Befehl unterstützt dieselben Argumente wie der vorliegende Befehl.
Beschreibung
Erstellt 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 generiert.
Bei der zielbasierten Signatur werden die generierten Dateien als Quellen zu „ <TARGET> “ hinzugefügt. Bei der älteren Signatur werden die Pfade der generierten Dateien zu „ <VAR> “ hinzugefügt.
Hinweis: Dies ist ein Low-Level-Makro. In der CMake-AUTOMOC-Dokumentation finden Sie eine bequemere Möglichkeit, Quelldateien mit moc verarbeiten zu lassen.
Argumente
Sie können ein explizites ` TARGET` festlegen. Dadurch wird sichergestellt, dass die Ziel-Eigenschaften ` INCLUDE_DIRECTORIES ` und ` COMPILE_DEFINITIONS ` auch beim Scannen der Quelldateien mit ` moc` verwendet werden.
Seit Qt 6.8 ist der Parameter TARGET erforderlich, um den korrekten Include-Pfad für die generierte .moc -Datei in der Quelldatei festzulegen, wenn anstelle einer Header-Datei eine Quelldatei an qt_wrap_cpp übergeben wird, um eine .moc -Datei für ein Ziel zu generieren.
Wenn Sie ` qt_wrap_cpp ` in einem Verzeichnisbereich aufrufen, der sich vom Verzeichnisbereich des Ziels unterscheidet, müssen Sie die zielbasierte Signatur von ` qt_wrap_cpp ` verwenden oder das Ziel mit dem Argument ` TARGET ` übergeben.
Sie können zusätzliche ` OPTIONS ` festlegen, die zu den ` moc `-Aufrufen hinzugefügt werden sollen. Mögliche Optionen finden Sie in der moc-Dokumentation.
Die „ OPTIONS “ können Generatorausdrücke auswerten, wenn „ TARGET “ gesetzt ist.
Hinweis: Wenn die „ OPTIONS “ sowohl Generatorausdrücke als auch Sonderzeichen enthalten, verwenden Sie Variablen, um diese zu implementieren. Verwenden Sie beispielsweise „ $<ANGLE-R> “, „ $<COMMA> “ und „ $<SEMICOLON> “ anstelle von „ > “, „ , “ und „ : “. Andernfalls werden die Generatorausdrücke nicht korrekt ausgewertet. „ OPTIONS “ sind in Generatorausdrücke eingebettet, daher müssen Sie Sonderzeichen darin escapen.
DEPENDS ermöglicht es Ihnen, zusätzliche Abhängigkeiten für die Neuerstellung der generierten Dateien hinzuzufügen. Dies ist nützlich, wenn die Quelldateien implizite Abhängigkeiten aufweisen, wie beispielsweise Code für ein Qt-Plugin, der eine „ .json “-Datei mithilfe des Makros „ Q_PLUGIN_METADATA()“ einbindet.
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 wird „ myapp.moc “ in „ myapp.cpp “ eingebunden. Um die Datei „ myapp.moc “ zu generieren, 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 an „ OPTIONS “ übergebenen Generatorausdrücke 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})Im folgenden Beispiel wird mit ` target_compile_definitions` die Variable ` COMPILE_DEFINITIONS ` gesetzt, die zu ` OPTIONS` hinzugefügt wird.
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)>")© 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.