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_DIRECTORIES
とCOMPILE_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.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を使用して、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.