En esta página

qt_wrap_cpp

Crea archivos .moc a partir de fuentes.

El comando está definido en el componente Core del paquete Qt6, que puede cargarse así:

find_package(Qt6 REQUIRED COMPONENTS Core)

Este comando se introdujo en Qt 5.0.

Sinopsis

qt_wrap_cpp soporta dos firmas. La primera firma se añadió en Qt 6.8 y tiene la siguiente forma:

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

Nota: La firma anterior se recomienda sobre la firma anterior.

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

Si los comandos sin versión están desactivados, utilice qt6_wrap_cpp() en su lugar. Admite el mismo conjunto de argumentos que este comando.

Descripción

Crea reglas para llamar a Meta-Object Compiler (moc ) en los archivos fuente dados. Para cada archivo de entrada, se genera un archivo de salida en el directorio de construcción.

Con la firma basada en el objetivo, los archivos generados se añaden como fuentes a <TARGET>. Con la firma más antigua, las rutas de los archivos generados se añaden a <VAR>.

Nota: Se trata de una macro de bajo nivel. Vea la documentación de CMake AUTOMOC para una forma más conveniente de permitir que los archivos fuente sean procesados con moc.

Argumentos

Puede establecer explícitamente TARGET. Esto asegurará que las propiedades de destino INCLUDE_DIRECTORIES y COMPILE_DEFINITIONS también se utilicen cuando se analicen los archivos fuente con moc.

Desde Qt 6.8, cuando se pasa un archivo fuente a qt_wrap_cpp en lugar de un archivo de cabecera para generar un archivo .moc para un objetivo, el parámetro TARGET es necesario para establecer la ruta de inclusión correcta para el archivo .moc generado en el archivo fuente.

Si llama a qt_wrap_cpp en un ámbito de directorio diferente del ámbito de directorio del objetivo, debe utilizar la firma basada en el objetivo de qt_wrap_cpp o pasar el objetivo con el argumento TARGET.

Puede establecer OPTIONS adicionales que deben añadirse a las llamadas a moc. Puede encontrar las posibles opciones en la documentación de moc.

OPTIONS puede evaluar expresiones del generador cuando TARGET está configurado.

Nota: Si OPTIONS incluye tanto expresiones generadoras como caracteres especiales, utilice variables para implementarlos. Por ejemplo, utilice $<ANGLE-R>, $<COMMA> y $<SEMICOLON> en lugar de >, , y :. De lo contrario, la expresión generadora no se evaluará correctamente. OPTIONS están envueltas en expresiones generadoras, por lo que debe escapar los caracteres especiales que contengan.

DEPENDS le permite añadir dependencias adicionales para la recreación de los archivos generados. Esto es útil cuando las fuentes tienen dependencias implícitas, como el código para un plugin Qt que incluye un archivo .json usando la macro Q_PLUGIN_METADATA().

Ejemplos

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

En el archivo anterior, myapp.moc está incluido en myapp.cpp. Para generar el archivo myapp.moc, se utiliza la macro qt_wrap_cpp con el parámetro TARGET. El archivo .moc y su ruta serán añadidos a los directorios sources e include del objetivo por la macro qt_wrap_cpp.

La versión antigua:

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

En el siguiente ejemplo, las expresiones del generador pasadas a OPTIONS se evaluarán desde que se establezca TARGET. El argumento se especifica así para evitar errores de sintaxis en las expresiones del generador.

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

El siguiente ejemplo utiliza target_compile_definitions para establecer COMPILE_DEFINITIONS que se añadirá a 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.