Qt: mocとuicの自動生成を完全マスター! AUTOGEN_TARGET_DEPENDS を使いこなすためのチュートリアル


CMake の "AUTOGEN_TARGET_DEPENDS" プロパティは、Qt プロジェクトにおいて、自動生成される moc ファイルと uic ファイルの依存関係を指定するために使用されます。これらのファイルは、Qt のメタオブジェクトシステム (QMetaObject) とユーザーインターフェースコンパイラ (QUIC) によって生成され、C++ コードと Qt UI ファイルを相互作用させるために必要です。

詳細

"AUTOGEN_TARGET_DEPENDS" プロパティは、";" で区切られたターゲット名またはファイル名のリストとして設定されます。これらの依存関係は、対応する _autogen ターゲットに追加されます。_autogen ターゲットは、moc ファイルと uic ファイルの生成に使用される一時的なターゲットです。

使用例

以下の例は、mytarget ターゲットの _autogen ターゲットに依存関係を追加する方法を示します。

set_property(TARGET mytarget PROPERTY AUTOGEN_TARGET_DEPENDS "mydep;myotherdep")

この場合、mydep ターゲットと myotherdep ターゲットが mytarget ターゲットの _autogen ターゲットの依存関係として追加されます。

  • "AUTOGEN_TARGET_DEPENDS" プロパティは、AUTOMOC または AUTOUIC プロパティが ON に設定されているターゲットにのみ使用できます。
  • 依存関係として指定できるのは、ターゲット名またはファイル名のみです。
  • "AUTOGEN_TARGET_DEPENDS" プロパティは、Qt プロジェクトでのみ使用できます。

利点

"AUTOGEN_TARGET_DEPENDS" プロパティを使用する利点は次のとおりです。

  • 生成されたファイルの依存関係を管理することで、ビルドシステムの複雑さを軽減することができます。
  • moc ファイルと uic ファイルの依存関係を明示的に指定することで、ビルドシステムの透明性と信頼性を向上させることができます。


set_property(TARGET mytarget PROPERTY AUTOGEN_TARGET_DEPENDS "mydep;myotherdep")

例 2: ファイル依存関係

この例では、mytarget ターゲットの _autogen ターゲットに myheader.h ヘッダーファイルと mymetadata.json メタデータファイルの依存関係を追加します。

set_property(TARGET mytarget PROPERTY AUTOGEN_TARGET_DEPENDS "myheader.h;mymetadata.json")

例 3: 複雑な依存関係

この例では、mytarget ターゲットの _autogen ターゲットに複数のターゲットとファイルの依存関係を追加します。

set_property(TARGET mytarget PROPERTY AUTOGEN_TARGET_DEPENDS "mydep;myotherdep;myheader.h;mymetadata.json;myui.ui")
  • "AUTOGEN_TARGET_DEPENDS" プロパティは、AUTOMOC または AUTOUIC プロパティが ON に設定されているターゲットにのみ使用できます。
  • 依存関係として指定できるのは、ターゲット名またはファイル名のみです。
  • これらの例は、AUTOGEN_TARGET_DEPENDS プロパティの使用方法を示すためのものです。実際のプロジェクトでは、必要に応じてこれらの例を調整する必要があります。


  • 制限 2
    "AUTOGEN_TARGET_DEPENDS" プロパティは、AUTOMOC または AUTOUIC プロパティが ON に設定されているターゲットにのみ使用できます。
  • 制限 1
    依存関係として指定できるのは、ターゲット名またはファイル名のみです。

これらの制限を克服するために、"AUTOGEN_TARGET_DEPENDS" プロパティの代替方法をいくつか検討することができます。

代替方法 1: カスタムターゲット

カスタムターゲットを使用して、moc ファイルと uic ファイルの生成を明示的に制御することができます。この方法には、以下の利点があります。

  • 生成されたファイルの出力場所を制御することができます。
  • 依存関係をより細かく制御することができます。

ただし、この方法は "AUTOGEN_TARGET_DEPENDS" プロパティよりも複雑で冗長になる可能性があります。

代替方法 2: CMake の "ADD_CUSTOM_COMMAND" コマンド

ADD_CUSTOM_COMMAND コマンドを使用して、moc ファイルと uic ファイルの生成を明示的に実行することができます。この方法には、以下の利点があります。

  • 生成されたファイルの出力場所を制御することができます。
  • カスタムターゲットよりも柔軟性があります。

代替方法 3: QMake

QMake は、Qt プロジェクトをビルドするためのもう 1 つのツールです。QMake は、"AUTOGEN_TARGET_DEPENDS" プロパティと同様の機能を提供しているため、CMake の代替として使用することができます。

代替方法の選択

どの代替方法を選択するかは、プロジェクトの要件によって異なります。複雑な依存関係を管理する必要がある場合は、カスタムターゲットまたは ADD_CUSTOM_COMMAND コマンドを使用する必要があります。より柔軟なソリューションが必要な場合は、QMake を使用することができます。

以下の例は、カスタムターゲットを使用して moc ファイルと uic ファイルを生成する方法を示します。

add_custom_target(_autogen
  COMMAND ${QT_MOC} ${MYHEADER.h} -o ${MY_MOC_FILE}
  COMMAND ${QT_UIC} ${MYUI.ui} -o ${MY_UI_FILE}
  DEPENDS ${MYHEADER.h} ${MYUI.ui})

add_dependencies(mytarget _autogen)