このページでは

QTP0005

qt_add_qml_module() の依存関係キーワードでCMakeターゲットを受け入れられるようにする。

このポリシーは Qt 6.8 で導入されました。これにより、DEPENDENCIES 、IMPORTS 、OPTIONAL_IMPORTS 、およびDEFAULT_IMPORTS キーワードを介して、CMake ターゲットをqt_add_qml_module()に渡すことが可能になります。

このポリシーを有効にすると、これらのキーワードに渡される引数の先頭にTARGET を付けることができ、それらは CMake ターゲット名として扱われます。QML モジュールの URI およびインポートパスは、そのターゲットから自動的に導出されます。

このポリシーの「OLD 」動作では、トークンシーケンスTARGET name が、TARGET とname という 2 つの別々の URI として扱われます。

このポリシーの「NEW 」動作では、TARGET はキーワードとして扱われます。URIは、その後に続くQMLモジュールターゲットから抽出されます。TARGET の後に続く名前が既存のターゲットを参照していない場合、またはそのターゲットがQMLモジュールに対応していない場合は、ハードエラーとなります。

「NEW 」および「OLD 」のいずれの動作においても、スラッシュとバージョンを付加することでモジュールのバージョンを指定することが可能です。詳細については、「モジュール依存関係の宣言」を参照してください。

背景

このポリシーが導入される前は、QMLモジュールの依存関係は、QtQuick やcom.example.mymodule といった文字列形式のURIで宣言する必要がありました。これは、依存関係のURIおよび(必要に応じて)インポートパスを、そのモジュールを提供するCMakeターゲットと一貫性を保たなければならないことを意味していました。

NEW の動作では、代わりに CMake ターゲット名で依存関係を参照できるようになります。ビルドシステムが、ターゲットから正しい URI とインポートパスを自動的に決定します。これにより、デフォルトの QML インポートパス外にある依存関係に対して手動でIMPORT_PATHエントリを指定する必要がなくなり、冗長性が軽減され、コピー&ペーストによるミスの一種が排除されます。

例

同じプロジェクト内で定義された別のモジュールに依存するモジュールを例に考えてみましょう。「OLD 」の動作では(またはQt 6.8以前では)、URIを明示的に記述する必要があります:

qt_add_qml_module(my_module
    URI MyModule
    VERSION 1.0
    DEPENDENCIES
        OtherModule
)

NEW の動作(ポリシーQTP0005がNEW に設定されている場合)では、依存関係をCMakeターゲット名で参照できます:

qt_policy(SET QTP0005 NEW)

qt_add_qml_module(other_module
    URI OtherModule
    VERSION 1.0
)

qt_add_qml_module(my_module
    URI MyModule
    VERSION 1.0
    DEPENDENCIES
        TARGET other_module
)

このTARGET 構文は、IMPORTS 、OPTIONAL_IMPORTS 、およびDEFAULT_IMPORTS でも利用可能です。

モジュールターゲットが実行ファイルであり、TARGET 依存関係が使用されている場合、qt_add_qml_module()はビルドディレクトリ内の実行ファイルの隣にqt.conf ファイルを自動的に生成します。このファイルは、TARGET 依存関係として指定された QML モジュールが実行時に見つけられるよう、QML インポートパスを設定します。この動作を抑制するには、NO_GENERATE_QTCONF を使用してください。

上記のように、qt_add_qml_module() を呼び出す前に、qt_policy(SET QTP0005 NEW) を使用してポリシーを明示的に設定できます。あるいは、REQUIRES のバージョン6.8以降でqt_standard_project_setup()を呼び出すことで、そのバージョンまでのすべてのポリシーを有効にすることができます。

Qt 6.8 では、ポリシーが `OLD` に設定されている状態で、`DEPENDENCIES`、`IMPORTS`、`OPTIONAL_IMPORTS`、または `DEFAULT_IMPORTS ` の引数として `TARGET ` を使用すると、非推奨の警告が表示されます。qt_policy()コマンドを使用して、ポリシーを明示的に `OLD ` または `NEW` に設定することで、この警告を抑制できます。

注: ポリシーの「OLD 」という動作は 非推奨となっており、将来的に削除される可能性があります。

qt_policy()、qt_standard_project_setup()、qt_cmake_policies、およびqt_add_qml_module()も参照してください 。

© 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.