このページでは

qt_wrap_cpp

ソースから.mocファイルを作成します。

このコマンドは、Qt6 パッケージのCore コンポーネントで定義されており、次のようにロードできます:

find_package(Qt6 REQUIRED COMPONENTS Core)

このコマンドは Qt 5.0 で導入されました。

概要

qt_wrap_cpp には 2 つのシグネチャがあります。最初のシグネチャは Qt 6.8 で追加され、以下の形式をとります:

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

注: 上記のシグネチャは 、旧式のシグネチャよりも推奨されます。

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

バージョン指定なしのコマンドが無効になっている場合は、代わりに `qt6_wrap_cpp() ` を使用してください。このコマンドと同じ引数セットをサポートしています。

説明

指定されたソースファイルに対して、Meta-Object Compiler (moc)を呼び出すルールを作成します。各入力ファイルに対して、ビルドディレクトリに出力ファイルが生成されます。

ターゲットベースのシグネチャでは、生成されたファイルが<TARGET> のソースとして追加されます。旧式のシグネチャでは、生成されたファイルのパスが<VAR> に追加されます。

注:これは 低レベルのマクロです。moc を使用してソースファイルを処理するより便利な方法については、CMake AUTOMOC ドキュメントを参照してください。

引数

TARGET を明示的に設定することができます。これにより、moc を使用してソースファイルをスキャンする際、ターゲットのプロパティINCLUDE_DIRECTORIES およびCOMPILE_DEFINITIONS も確実に使用されるようになります。

Qt 6.8 以降、ターゲット用の.moc ファイルを生成するために、ヘッダーファイルではなくソースファイルがqt_wrap_cpp に渡される場合、生成された.moc ファイルのソースファイル内での正しいインクルードパスを設定するために、TARGET パラメータが必要となります。

ターゲットのディレクトリスコープとは異なるディレクトリスコープでqt_wrap_cpp を呼び出す場合は、qt_wrap_cpp のターゲットベースのシグネチャを使用するか、TARGET 引数でターゲットを渡す必要があります。

moc の呼び出しに追加すべき追加のOPTIONS を設定できます。利用可能なオプションについては、moc のドキュメントを参照してください。

OPTIONS は、TARGET が設定されている場合、ジェネレータ式を評価できます。

注: OPTIONS にジェネレータ式と特殊文字の両方が含まれる場合は 、変数を使用して実装してください。たとえば、> 、, 、: の代わりに、$<ANGLE-R> 、$<COMMA> 、$<SEMICOLON> を使用してください。そうしないと、ジェネレータ式が正しく評価されません。OPTIONS はジェネレータ式で囲まれているため、その中の特殊文字はエスケープする必要があります。

DEPENDS 生成されたファイルを再作成するために、追加の依存関係を指定できます。これは、ソースに暗黙の依存関係がある場合に役立ちます。例えば、Q_PLUGIN_METADATA() マクロを使用して.json ファイルを含んでいる Qt プラグインのコードなどが該当します。

例

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"

上記のファイルでは、myapp.moc がmyapp.cpp にインクルードされています。myapp.moc ファイルを生成するには、qt_wrap_cpp マクロをTARGET パラメータとともに使用します。.moc ファイルとそのパスは、qt_wrap_cpp マクロによってターゲットのソースおよびインクルードディレクトリに追加されます。

旧バージョン:

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

以下の例では、TARGET が設定されているため、OPTIONS に渡されたジェネレータ式が評価されます。ジェネレータ式での構文エラーを回避するために、引数はこのように指定されます。

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

次の例では、`target_compile_definitions` を使用して `COMPILE_DEFINITIONS` を設定しており、これが `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.