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.