qt_wrap_cpp
Crée des fichiers .moc à partir des sources.
La commande est définie dans le composant « Core » du paquet « 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 prend en charge deux signatures. La première signature a été ajoutée dans Qt 6.8 et se présente sous la forme suivante :
qt_wrap_cpp(<TARGET> src_file1 [src_file2 ...]
[OPTIONS ...]
[DEPENDS ...])Remarque : la signature ci-dessus est recommandée de préférence à 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 plutôt ` qt6_wrap_cpp() `. Elle prend en charge le même ensemble d’arguments que cette commande.
Description
Crée des règles permettant d’appeler le générateur de code (Meta-Object Compiler, moc) sur les fichiers source indiqués. Pour chaque fichier d’entrée, un fichier de sortie est généré dans le répertoire de compilation.
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 d’accès des fichiers générés sont ajoutés à <VAR>.
Remarque : il s’agit d’une macro de bas niveau. Consultez la documentation CMake AUTOMOC pour découvrir une méthode plus pratique permettant de traiter les fichiers source avec moc.
Arguments
Vous pouvez définir explicitement une valeur pour ` TARGET`. Cela garantira que les propriétés de cible ` INCLUDE_DIRECTORIES ` et ` COMPILE_DEFINITIONS ` soient également utilisées lors de l’analyse des fichiers source avec ` moc`.
Depuis Qt 6.8, lorsqu’un fichier source est transmis à ` qt_wrap_cpp ` à la place 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 du fichier ` .moc ` généré dans le fichier source.
Si vous appelez ` qt_wrap_cpp ` dans une portée de répertoire différente de celle de la cible, vous devez utiliser la signature basée sur la cible de ` qt_wrap_cpp ` ou transmettre la cible via l’argument ` TARGET `.
Vous pouvez définir des ` OPTIONS ` supplémentaires qui doivent être ajoutés aux appels à ` moc `. Vous trouverez les options possibles dans la documentation de moc.
Les OPTIONS peuvent évaluer des expressions génératrices lorsque l’option « TARGET » est activée.
Remarque : si les OPTIONS s contiennent à la fois des expressions de générateur et des caractères spéciaux, utilisez des variables pour les implémenter. Par exemple, utilisez $<ANGLE-R>, $<COMMA> et $<SEMICOLON> au lieu de >, , et :. Sinon, l’expression de générateur ne sera pas évaluée correctement. Les OPTIONS sont encapsulés dans des expressions de générateur ; vous devez donc échapper les caractères spéciaux qu’ils contiennent.
DEPENDS vous permet d’ajouter des dépendances supplémentaires pour la recréation des fichiers générés. Cela s’avère utile lorsque les sources comportent des dépendances implicites, comme le code d’un plugin Qt qui inclut un fichier .json à l’aide de la macro Q_PLUGIN_METADATA().
Exemples
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 d’accès 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 de générateur transmises à ` 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 de 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 seront ajoutées à ` 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.