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)を呼び出すルールを作成する。各入力ファイルに対して、ビルド・ディレクトリに出力ファイルが生成される。生成されたファイルのパスは<VAR> に追加される。

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

引数

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

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

moc 呼び出しに追加するOPTIONS を追加設定できます。可能なオプションはmocのドキュメントにあります。

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

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

DEPENDS を使用すると、生成されたファイルを再作成するための依存関係を追加できます。これは、 () マクロを使用して ファイルを含む Qt プラグインのコードのように、ソースに暗黙の依存関係がある場合に便利です。Q_PLUGIN_METADATA .json

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.mocmyapp.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を使用して、OPTIONS に追加されるCOMPILE_DEFINITIONSを設定しています。

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.