Sur cette page

qt_wrap_cpp

Crée des fichiers .moc à partir des sources.

La commande est définie dans le composant Core du paquetage Qt6, qui peut être chargé comme suit :

find_package(Qt6 REQUIRED COMPONENTS Core)

Cette commande a été introduite dans Qt 5.0.

Synopsis

qt_wrap_cpp supporte deux signatures. La première signature a été ajoutée dans Qt 6.8 et a la forme suivante :

qt_wrap_cpp(<TARGET> src_file1 [src_file2 ...]
            [OPTIONS ...]
            [DEPENDS ...])

Note : La signature ci-dessus est recommandée par rapport à l'ancienne signature.

qt_wrap_cpp(<VAR> src_file1 [src_file2 ...]
            [TARGET target]
            [OPTIONS ...]
            [DEPENDS ...])

Si les commandes sans version sont désactivées, utilisez qt6_wrap_cpp() à la place. Elle prend en charge le même ensemble d'arguments que cette commande.

Description

Crée des règles pour appeler Meta-Object Compiler (moc) sur les fichiers source donnés. Pour chaque fichier d'entrée, un fichier de sortie est généré dans le répertoire de construction.

Avec la signature basée sur la cible, les fichiers générés sont ajoutés en tant que sources à <TARGET>. Avec l'ancienne signature, les chemins des fichiers générés sont ajoutés à <VAR>.

Note : Il s'agit d'une macro de bas niveau. Voir la documentation CMake AUTOMOC pour un moyen plus pratique de laisser les fichiers sources être traités avec moc.

Arguments

Vous pouvez définir un argument explicite TARGET. Cela garantira que les propriétés cibles INCLUDE_DIRECTORIES et COMPILE_DEFINITIONS sont également utilisées lors de l'analyse des fichiers sources avec moc.

Depuis Qt 6.8, lorsqu'un fichier source est transmis à qt_wrap_cpp au lieu d'un fichier d'en-tête pour générer un fichier .moc pour une cible, le paramètre TARGET est nécessaire pour définir le chemin d'inclusion correct pour le fichier .moc généré dans le fichier source.

Si vous appelez qt_wrap_cpp dans un répertoire différent de celui de la cible, vous devez utiliser la signature basée sur la cible de qt_wrap_cpp ou passer la cible avec l'argument TARGET.

Vous pouvez définir des options supplémentaires pour OPTIONS qui doivent être ajoutées aux appels à moc. Vous trouverez les options possibles dans la documentation moc.

OPTIONS peut évaluer les expressions du générateur lorsque TARGET est défini.

Remarque : si OPTIONS comprend à la fois des expressions de générateur et des caractères spéciaux, utilisez des variables pour les mettre en œuvre. Par exemple, utilisez $<ANGLE-R>, $<COMMA> et $<SEMICOLON> au lieu de >, , et :. Sinon, l'expression du générateur ne sera pas évaluée correctement. OPTIONS sont enveloppés dans des expressions de générateur, vous devez donc y échapper les caractères spéciaux.

DEPENDS vous permet d'ajouter des dépendances supplémentaires pour la recréation des fichiers générés. C'est utile lorsque les sources ont des dépendances implicites, comme le code d'un plugin Qt XML qui inclut un fichier .json à l'aide de la macro Q_PLUGIN_METADATA().

Exemples d'utilisation

Depuis 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"

Dans le fichier ci-dessus, myapp.moc est inclus dans myapp.cpp. Pour générer le fichier myapp.moc, la macro qt_wrap_cpp est utilisée avec le paramètre TARGET. Le fichier .moc et son chemin seront ajoutés aux répertoires sources et include de la cible par la macro qt_wrap_cpp.

L'ancienne version :

set(SOURCES myapp.cpp main.cpp)
qt_wrap_cpp(SOURCES myapp.h)
qt_add_executable(myapp ${SOURCES})

Dans l'exemple suivant, les expressions du générateur passées à OPTIONS seront évaluées puisque TARGET est défini. L'argument est spécifié de cette manière pour éviter les erreurs de syntaxe dans les expressions du générateur.

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})

L'exemple suivant utilise target_compile_definitions pour définir COMPILE_DEFINITIONS qui sera ajouté à OPTIONS.

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.